首页 > 其他分享 >写一个把数字转成中文的方法,例如:101转成一百零一

写一个把数字转成中文的方法,例如:101转成一百零一

时间:2024-11-25 09:04:17浏览次数:9  
标签:零一 console log result 转成 超出范围 101 numberToChinese

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

相关文章

  • 牛客面试必刷TOP101之链表专项
    个人主页:C++忠实粉丝欢迎点赞......
  • AbMole|Ossirene (AS101)(CAS号106566-58-9;目录号M6189)
    Ossirene(AS101)是一种新的IL-1β转化酶抑制剂,可以降低IL-17水平和抑制Th17细胞功能,同时其氧化还原调节活性能够抑制特定的白细胞整联蛋白(如α4β1和α4β7),以及增强调节性T细胞(Treg)的活性,具有抗炎和抗凋亡活性。 生物活性体外研究:对capase-1处理以Ossirene(AS101),Ossi......
  • 10108-机械手柔性生产线物料分拣控制系统设计(说明书+设计资料源文件+运行软件+PLC组态
    10108-机械手柔性生产线物料分拣控制系统设计(说明书+设计资料源文件+运行软件+PLC组态王仿真+PPT)功能描述:机械手臂的应用主要是由内部执行机构驱动器以及内部电气控制设备组合而成。通过气动设备来实现机械手的快速精确运转,来保证货物可以被有效的抓取和移动。在机械手的......
  • 二维数组1019
    publicclassPlaceDemo{publicstaticvoidmain(String[]args){//班级学生座位(二维数组)place();pace();}publicstaticvoidplace(){//静态初始化数组-----数据类型[][]数组名=new数据类型[]{元素1,元素2,元素3,··......
  • 国产AI逆袭!零一万物新模型Yi-Lightning超越 GPT-4o
    近日,由全球千万用户盲测投票产生的AI模型排行榜公布,国产AI模型“Yi-Lightning”逆袭,超越了此前长期占据榜首的GPT-4。“Yi-Lightning”模型由国内知名AI公司零一万物研发,在多个分榜中均名列前茅,其中数学分榜更是与国际巨头并列第三。值得关注的是,“Yi-Lightning”......
  • 山东大学管理学院携手和鲸“101 数智领航计划”,为“经济管理+AI”学科建设注入新动力
    近年来,高校在“四新”理念的指导下,不断加速探索教学资源建设的新路径,以推动高等教育的“质量革命”。山东大学管理学院积极响应这一趋势,全面优化课程建设路径,推动教育模式从“学知识”向“强能力”转变。学院依托其国家级实验教学示范中心——山东大学管理学科实验中心,积极探索基于......
  • 20241015
    P1037易形迷宫(maze)我们可以转化一下题面,把胸口碎大石的功能换成幽灵,可以直接穿透石头,那么我们可以把炸碎石头改成可以向\(8\)个方向随便走\(k-1\)步,然后我们直接\(dij\)即可#include<bits/stdc++.h>usingnamespacestd;usingPii=pair<int,int>;consti......
  • cvpr注意事项和注册流程(2025版)(20241015更新还未开放注册)
    本文章基于现有网上没有cvpr详细版本的一步一步的注册流程进行编写,用于指导自己和方便他人进行注册。接下来将从CVPR2025的重要节点、变更事项、注册流程进行说明重要节点CVPR2025变更的重要事项Duetothedramaticincreaseinthenumberofsubmissionsandthedeterio......
  • [20241013]sqlplus spool与文件覆盖.txt
    [20241013]sqlplusspool与文件覆盖.txt--//这个问题在8月份遇到的问题,我发现在sqlplus下spoola.sql文件,并没有在当前目录产生a.sql文件,后来我发现建立在环境变量--//ORACLE_PATH定义的目录下,当时以为自己打开多个会话,没有注意自己工作的当前目录。事后我测试,问题视乎消失了,我再......
  • 101基于java ssm springboot协同过滤算法高考志愿填报系统(源码+文档+运行视频+讲解视
    项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows......