写出一个函数trans,将数字转换成汉语的输出,输入为不超过10000亿的数字。
trans(123456) // 十二万三千四百五十六
trans(100010001)// 一亿零一万零一
- 思路
-
- 每个数字的中文需要一个数组来映射
- 单位和倍数要显示定义(亿到万,与万千百十进制不一样)
- 遍历倍数数组,按当前位切分成除数和余数,然后计算后一位是否存在(补零)
const foo = (num: number): string => {
const name = '零壹贰叁肆伍陆柒捌玖拾'.split('');
const unit = '亿万千百十'.split('');
const times = [100000000, 10000, 1000, 100, 10];
const mod = (n: number, i: number = 0): string => {
while(i < times.length) {
const m = times[i]
if(n >= m) {
const a = Math.floor(n / m)
const b = n % m
const suffix = (i + 1 < times.length && 10 * b / times[i] < 1) ? name[0] : '';
// 按当前位切分成除数和余数,然后计算后一位是否存在(补零)
return mod(a, i) + unit[i] + suffix + mod(b, i++);
}
i++;
}
return name[n]
}
return mod(num);
}
console.log(123456, foo(123456));
console.log(100010001, foo(100010001));
export default foo
结果: