Sunny-117 / js-challenges

✨✨✨ Challenge your JavaScript programming limits step by step

Home Page:https://juejin.cn/column/7244788137410560055

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

阿拉伯数字专汉字

Sunny-117 opened this issue · comments

commented
阿拉伯数字专汉字

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))