function numberToChinese(number) { number = parseInt(number); if(number >= 0){ let s1 = [ "〇", "一", "二", "三", "四", "五", "六", "七", "八", "九" ]; let s2 = [ "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千" ]; let result = "", str = number + ''; let n = str.length; let zero = false; for (let i = 0; i < n; i++) { let num = str.charCodeAt(i) - 48;//'0'.charCodeAt(0) let numStr = s1[num]; if (i != n - 1) { let unit = s2[n - 2 - i]; if(numStr == "〇"){ zero = true; }else{ if(zero){ result += "〇"; } zero = false; if(i == 0 && numStr == "一" && unit == "十"){//第一位如果是1且后面单位是十,忽略前面的1 result += unit; }else{ result += numStr + unit; } } } else if(!numStr == "〇" || n == 1){//最后一位不是0 if(zero){ result += "〇"; } result += numStr; } } return result; } }优化以上代码
时间: 2024-02-01 08:03:08 浏览: 139
NumberToChinese.java
可以考虑将一些重复计算的部分提出来,避免重复计算。同时,可以使用数组来存储数字和单位,避免使用多个变量。优化后的代码如下:
```
function numberToChinese(number) {
number = parseInt(number);
if (number < 0) {
return "";
}
if (number === 0) {
return "零";
}
let digits = [], result = "";
let s1 = ["〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
let s2 = ["", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"];
while (number > 0) {
digits.push(number % 10);
number = Math.floor(number / 10);
}
for (let i = digits.length - 1; i >= 0; i--) {
let digit = digits[i];
let unit = s2[digits.length - i];
if (digit === 0) {
if (i !== 0 && i % 4 === 0 && result[result.length - 1] !== "万") {
result += "万";
}
continue;
}
if (result[result.length - 1] === "万" && unit === "千") {
result += "零";
}
result += s1[digit] + unit;
}
if (result[result.length - 1] === "零") {
result = result.slice(0, -1);
}
return result;
}
```
阅读全文