如何把数字转为大写的汉字

博主因财务工作需填大写数字,决定编写JavaScript代码实现数字转大写汉字。步骤包括构造数据、将阿拉伯数字转为汉字并每四位添加逗号、把四位数字转换为X仟X百X拾X并处理零、利用前面函数完成数字转汉字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在财务跑账。财务的妹纸让我填大写的数字,瞬间不知道怎么填,对比着提示单,一个字一个字写了下来。

看着财务妹纸微笑着迷妹一般的望着我,我不仅陷入了沉思.......干脆写个JavaScript代码,来转换数字为大写的汉字吧。

说干就干~!

第一步:构造数据。雷打不同的数据,自然使用const定义为常量。

const  dataArr = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
const  danweiArr = ["","拾","佰","仟"] ;
const  WanArr = ["","万","亿","万亿"];

第二步:把阿拉伯数字转为汉字,且每四位添加一个逗号隔开。

这个习惯跟西方不一样。中文的数字,是4个一组的。比如,12312,中文是“一万两千三百一十二” ,就是 1,2312分组的。

  /*
    * changeNumToString 方法:
    * 把阿拉伯数字转为汉字,且每四位添加一个逗号隔开。
    * 参数:num,字符串形式的数字
    * */
    let  changeNumToString = function(num){
        let res = [];
        // 数数的变量
        let index = 0;
         // 遍历字符串num。因为数学习惯,大数在左边,小数在右边,所以逆向遍历数字。
        for(let i=num.length-1 ; i >=0 ; i--){
            // 挨个获取数字,并且转为汉字
            let n = Number(num.charAt(i) );
            let dataNum = dataArr[n];
            res.unshift(dataNum);
            // 数数,判断是不是4和4的倍数。
            // 是,添加逗号在前面。但是,开头不能是逗号。
            // 所以,index的值不能跟字符串长度一致
            index++;
            if( index % 4 === 0  && index !== num.length ){
                res.unshift(",");
            }
        }
       return   res.join("");
    };

第三步:把四位数字变X仟X百X拾X。注意对“零”的处理。

/*
    * changeNumToBai 方法,把四位数字变X仟X百X拾X
    * 参数:numHanZi ,汉字形式的数字。
    * */
    let  changeNumToBai = function(numHanZi){
         let  len = numHanZi.length;
         let  newStr = "";
         // 是否已经对零进行了处理。
         let  hasLing = false;
         for(let i=0 ; i <= len-1 ; i++){
             // 如果为“零”,且没有对零处理
            if( numHanZi[i] === dataArr[0] && hasLing === false ){
                newStr += numHanZi[i];
                hasLing=true;
            // 如果为“零”,且已经对零处理了,就直接跳过该数字。
            //    如 1002, 就只会是 一千零二,只有一个汉字“零”。
            }else if( numHanZi[i] === dataArr[0] && hasLing === true){
                continue;
            }else{
                newStr += numHanZi[i]+danweiArr[len-1-i];
            }
         }
         return newStr;
    };

第四步:利用前面的函数,把数字转为汉字

 /*
    * 把数字转为汉字
    * */
    let  numToString = function(num){
        let numString = changeNumToString(num);
        // 把数字字符串用逗号切割成数组
        let arr = numString.split(",");
        let res = [];
        let wanIndex = 0 ;
        // 逆向处理数字。先从小位上的数开始。
        for(let i=arr.length-1 ; i>=0 ; i--){
            // 把数字变为  X仟X百X拾X
            let  smallString =  changeNumToBai( arr[i] );
            // 添加“万,亿”等单位
            smallString += WanArr[wanIndex];
            wanIndex++;
            // 因为是从小到大处理数据,把结果插入到数组的头部。
            res.unshift(smallString);
        }
        return res.join("");
    };

    console.info( numToString("2121031002") );
    // 贰拾壹亿贰仟壹佰零叁万壹仟零贰

完美~收工~!

在财务妹子的一片赞叹中,我.........一个寒颤我醒了,太冷了,没关窗,这个雨下的,夏天硬是活成了冬天~唉~

THE END.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值