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

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

看着财务妹纸微笑着迷妹一般的望着我,我不仅陷入了沉思.......干脆写个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.

发布了73 篇原创文章 · 获赞 97 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42703239/article/details/90607652