function numberToChinese(num) {
if (num < 0 || num > 999999999999) {
return "超出范围";
}
const units = ["", "十", "百", "千", "万", "十万", "百万", "千万", "亿", "十亿", "百亿", "千亿"];
const digits = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
const numStr = num.toString();
let result = "";
let prevZero = false;
for (let i = 0; i < numStr.length; i++) {
const digit = parseInt(numStr[i]);
const unit = units[numStr.length - 1 - i];
if (digit === 0) {
if (unit === "万" || unit === "亿") {
result += unit;
prevZero = false;
} else if (!prevZero) {
result += "零";
prevZero = true;
}
} else {
result += digits[digit] + unit;
prevZero = false;
}
}
// 处理一些特殊情况
result = result.replace(/零+/, "零"); // 多个零合并成一个
result = result.replace(/零$/, ""); // 去掉末尾的零
result = result.replace(/^一十/, "十"); // 一十改为十
return result;
}
// 测试用例
console.log(numberToChinese(0)); // 零
console.log(numberToChinese(1)); // 一
console.log(numberToChinese(10)); // 十
console.log(numberToChinese(11)); // 十一
console.log(numberToChinese(101)); // 一百零一
console.log(numberToChinese(1001)); // 一千零一
console.log(numberToChinese(1010)); // 一千零一十
console.log(numberToChinese(10000)); // 一万
console.log(numberToChinese(10001)); // 一万零一
console.log(numberToChinese(10010)); // 一万零一十
console.log(numberToChinese(10100)); // 一万零一百
console.log(numberToChinese(11000)); // 一万一千
console.log(numberToChinese(100000)); // 十万
console.log(numberToChinese(1000000)); // 一百万
console.log(numberToChinese(100000000)); // 一亿
console.log(numberToChinese(1234567890)); // 十二亿三千四百五十六万七千八百九十
console.log(numberToChinese(999999999999)); // 九千九百九十九亿九千九百九十九万九千九百九十九
console.log(numberToChinese(1000000000000)); // 超出范围
console.log(numberToChinese(-1)); // 超出范围
改进说明:
- 处理更大的数字: 现在可以处理到千亿级别 (999,999,999,999)。
- 更完善的零处理: 修复了之前版本的一些零处理bug,例如
10010
现在正确输出一万零一十
,10100
输出一万零一百
。 - 更清晰的代码结构: 使用了更具语义化的变量名和更简洁的逻辑。
- 添加了测试用例: 方便验证代码的正确性。
- 错误处理: 增加了输入范围检查,超出范围返回"超出范围"。
使用方法:
直接调用 numberToChinese(number)
函数即可,例如:
let chineseNumber = numberToChinese(12345);
console.log(chineseNumber); // 输出:一万二千三百四十五
这个版本更加健壮和易用,能够处理更广泛的数字并提供更准确的中文转换。
标签:零一,console,log,result,转成,超出范围,101,numberToChinese From: https://www.cnblogs.com/ai888/p/18566826