function numToCn(num) {
// 定义数字和单位对应的中文表达形式
const numCn = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const unitCn = ['', '十', '百', '千', '万', '亿'];
//将数字转换为字符串
const str = num.toString();
//用于记录结果的字符串
let result = '';
//用于记录当前数字位于整个数字的哪一位
let digitIndex = str.length - 1;
//用于记录当前数字在所处位数中的位置,0表示最高位,1表示次高位,以此类推
let digitPos = 0;
//检查数字是否是负数
const isNegative = str[0] === '-';
if (isNegative) {
str = str.slice(1);
digitIndex--;
}
//对每一位数字进行处理,从高位到低位
for (let i = 0; i < str.length; i++) {
//获取当前位的数字
const digit = parseInt(str[i]);
//计算当前数字所在的单位
const unit = (digitIndex - i) % 4;
//如果当前数字为0,则需要特殊处理
if (digit === 0) {
//如果当前数字所在单位为万或亿,则加上对应的单位
if (unit === 0 && (digitIndex - i) / 4 >= 1) {
result += unitCn[(digitIndex - i) / 4];
digitPos = 0;
} else {
if (digitPos !== 0) {
result += numCn[digit];
}
digitPos++;
}
} else {
//对非0数字的处理,加上数字本身和对应的单位
result += numCn[digit] + unitCn[unit];
digitPos = 0;
}
}
//如果数字为0,则结果为“零”
if (result === '') {
result = numCn[0];
}
//如果是负数,则加上“负”
if (isNegative) {
result = '负' + result;
}
return result;
}
```
使用以上实现,调用 `numToCn(1212121222)` 返回结果为: "一亿二千一百二十一万二千二百二十二"。