阿拉伯数字专汉字
Sunny-117 opened this issue · comments
const digits = '零一二三四五六七八九';
const units = ['', '十', '百', '千', '万', '亿'];
const toChinese = (num) => {
if (num === 0) return digits[0];
const nums = String(num).split('').reverse().map(Number);
const result = [];
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0) {
result.push(digits[nums[i]] + units[i]);
} else if (i !== 0 && result[result.length - 1] !== digits[0]) {
result.push(digits[0]);
}
}
return result.reverse().join('');
};
该函数接受一个数字作为参数,返回对应的汉字字符串。具体实现中定义了两个字符串常量,一个用于表示阿拉伯数字,一个用于表示单位。然后将数字转换成数组,并从低位到高位遍历,依次将每个数字转换成汉字,并加上对应的单位。在转换过程中,需要特别注意数字 0 的处理,它需要根据前面是否有数字来判断是否需要转换成“零”。
function numToChinese(num){
const digits = '零一二三四五六七八九';
const units = ['', '十', '百', '千'];
const bigUnits = ['', '万', '亿', '万亿'];
const numStr = num.toString();
const len = numStr.length;
let chineseNumber = '';
for (let unitIndex = len - 1 ; unitIndex >= 0; unitIndex--) {
const digit = numStr[len - 1 - unitIndex];
if(digit === '0'){
if(chineseNumber[chineseNumber.length-1]!==digits[0] && unitIndex !== 0){
chineseNumber += digits[0];
}
}else{
chineseNumber += digits[digit] + units[unitIndex%4];
}
if(unitIndex%4 === 0 && unitIndex < 12){
chineseNumber += bigUnits[Math.floor(unitIndex/4)];
}
}
return chineseNumber;
}
console.log(numToChinese(102345060))