[JS] Convert Arabic numerals to Chinese numerals (including long numbers in hundreds of millions of units)

Article directory

  • Encapsulation conversion function:
function numberToChinese(num) {
    
    
  const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
  const chineseUnits = ['', '十', '百', '千', '万', '十万', '百万', '千万', '亿'];
  if (num === 0) {
    
    
    return chineseNums[0];
  }
  let chineseStr = '';
  let unitIndex = 0;

  while (num > 0) {
    
    
    if (unitIndex > 8) {
    
    
      const start = chineseNums.indexOf(chineseStr[0]);
      const end = chineseStr.slice(1, -1);
      // 十亿以上 改为 数字输出
      chineseStr = `${
      
      num}${
      
      start}${
      
      end}`;
      break;
    }
    // 获取余数
    const remainder = num % 10;
    // 如果 num 不能被 10 整除
    if (remainder) {
    
    
      if (unitIndex === 1 && num < 10) {
    
    
        // 一十一 转换为 十一
        chineseStr = chineseUnits[unitIndex] + chineseStr;
      } else {
    
    
        console.log(chineseNums[remainder], chineseUnits[unitIndex], chineseStr);
        if (chineseStr.includes('万')) {
    
    
          // 优化万级别的显示
          chineseStr = chineseNums[remainder] + chineseUnits[unitIndex].replace('万', '') + chineseStr;
        } else {
    
    
          chineseStr = chineseNums[remainder] + chineseUnits[unitIndex] + chineseStr;
        }
      }
    } else {
    
    
      // 加零
      chineseStr = chineseNums[remainder] + chineseStr;
    }
    // 去除末尾的 零
    if (chineseStr.charAt(chineseStr.length - 1) === chineseNums[0]) {
    
    
      chineseStr = chineseStr.slice(0, -2);
    }
    // 去重中间重复的 零
    chineseStr = chineseStr.replace('零零', '零');
    // num 除 10,向下取整
    num = Math.floor(num / 10);
    // 位数进 1
    unitIndex += 1;
  }
  return chineseStr;
}
  • Use Cases:
console.log(numberToChinese(0));	// 零
console.log(numberToChinese(9));	// 九
console.log(numberToChinese(11));	// 十一
console.log(numberToChinese(498827030));	// 四亿九千八百八十二万七千零三十
console.log(numberToChinese(220830734));	// 二亿二千零八十三万零七百三十四
console.log(numberToChinese(33320001111));	// 333亿二千万零一千一百一十

Guess you like

Origin blog.csdn.net/qq_45677671/article/details/133270837