阿拉伯数字转大写中文

步阐
• 阅读 3211
代码如下
function getChinese(n){
    // 判断参数是否为 0 或 0以上的 一个数字
    if (!/^(0|[1-9]\d*)$/.test(n)) return "这不是一个正确的数字";
    // 参数转字符串
    n += ""  
    // unit 数字的单位 num数字的大写汉字 str 存放处理后的字符串
    var unit = "个拾佰仟万拾佰仟亿拾佰仟",num="零壹贰叁肆伍陆柒捌玖",str = "";
    // 判断数字位数不能超出 unit 的长度
    if(n.length>unit.length) return `不能超过${unit.length}位`
    // n[i]数字的每一项 num的下标对应数字0-9 所以num[n[i]]可以取到数字对应的大写汉字
    // 因为数字n是从右到左依次为 个位、十位... 而 unit 顺序正好相反 所以用unit[n.length-1-i]取到对应的单位。
    for (var i=0;i<n.length;i++) str += num[n[i]] + unit[n.length-1-i];
    // $1,$2... 表示 匹配结果中对应分组匹配的结果
    // 如果 n 存在 0 那么str会出现 零(千|百|拾|个) 这种情况。所以用下面的方法替换。
    // replace(/零(千|百|拾|个)/g,"零")
    // 如果 n 存在多个 0 咱们只需要一个 0 所以用下面方法替换
    // replace(/(零)+/g,"零")
    // 如果 存在 零(万|亿),即万位、亿位为0,我们只需要 (万|亿) 
    // replace(/零(万|亿)/g, "$1")
    // 如果 n 包含 10 我们只需要 拾
    // replace(/壹(拾)/g, "$1$2")
    // 结尾去掉 零|个
    // replace(/(零|个)$/g,"")
    return str.replace(/零(仟|佰|拾|个)/g,"零").replace(/(零)+/g,"零").replace(/零(万|亿)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/(零|个)$/g,"");
}
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
typeScript数据类型
//布尔类型letisDone:booleanfalse;//数字类型所有数字都是浮点数numberletdecLiteral:number6;lethexLiteral:number0xf00d;letbinaryLiteral:number0b101
Jacquelyn38 Jacquelyn38
4年前
这些JS工具函数够你用到2020年底了
前言活不多说,自己平时搜集的干货函数奉上。干货函数找出数字在数组中下一个相邻的元素let i  "";let rr  ;const name  (n, arr1)    let num  Number(n);    for (let i  0; i < arr1.length; i)         const elemen
CuterCorley CuterCorley
4年前
C语言基础习题50例(六)26-30
习题26利用递归方法求5。实现思路:使用递归。代码如下:cinclude<stdio.hintmain(){intrec(intn);intresultrec(5);printf("5%d\n",result);return0;}intrec(intn){if(n1||n
DaLongggggg DaLongggggg
4年前
python刷题-进制转换
十六进制转八进制问题描述  给定n个十六进制正整数,输出它们对应的八进制数。输入格式  输入的第一行为一个正整数n(1<n<10)。  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式  输出n行,每行为输入对应的八进制正整数。  【注意】  输入的十六进制数不会有
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Codevs 1159最大全0子矩阵
题目描述Description在一个0,1方阵中找出其中最大的全0子矩阵,所谓最大是指O的个数最多。输入描述InputDescription输入文件第一行为整数N,其中1<N<2000,为方阵的大小,紧接着N行每行均有N个0或1,相邻两数间严格用一个空格隔开。输出描述OutputDescription
Wesley13 Wesley13
3年前
JS常用正则表达式和JS控制输入框输入限制(数字、汉字、字符)
验证数字:^\09\\$验证n位的数字:^\\d{n}$验证至少n位数字:^\\d{n,}$验证mn位的数字:^\\d{m,n}$验证零和非零开头的数字:^(0|\19\\09\\)$验证有两位小数的正实数:^\09\(.\09\{2})?$验证有13位小数的正实数:^\09\
Wesley13 Wesley13
3年前
JS正则表达式验证
验证数字的正则表达式集 验证数字:^\09\\$ 验证n位的数字:^\\d{n}$ 验证至少n位数字:^\\d{n,}$ 验证mn位的数字:^\\d{m,n}$ 验证零和非零开头的数字:^(0|\19\\09\\)$ 验证有两位小数的正实数:^\09\(.\09\{2})?$ 验
Stella981 Stella981
3年前
HDOJ 2100 Lovekey
ProblemDescriptionXYZ26进制数是一个每位都是大写字母的数字。A、B、C、…、X、Y、Z分别依次代表一个0~25的数字,一个n位的26进制数转化成是10进制的规则如下A0A1A2A3…An1的每一位代表的数字为a0a1a2a3…an1,则该XYZ26进制数的10进制值就为m=a0\26
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
步阐
步阐
Lv1
热爱是不会降温的。
文章
4
粉丝
0
获赞
0