js金额小写转大写并转元角分支持小数点后两位

4 篇文章 0 订阅

先说逻辑

第一步发现并创建核心规律

0-9零-玖建立对应关系,将零-玖创建数组使大写汉字的下标为0-9
研究后会发现 万,亿,兆 这些大的单位下都包含 “个位”,“十位”,“百位”,“千位”(并且是四位一次循环),数字长度大于4的时候 ,5的倍数 后边跟上大的单位(万,亿,兆);规律出来之后发现我们读数字的时候是从最大位开始的,而最大位的计数是从最小位开始的,这个时候把数字转换为字符串然后切成数组,再来个倒叙,然后一个for循环就完事;
(非逼着我这个不善言辞的人写长篇文章,实在是不想写了,你们看代码吧。 c v大法用起来保证没问题)

 function StringNumbers(num) {
      num = Number(num) ? Number(num) : 0;
      let textNum = [ "零","壹","贰","叁","肆","伍","陆", "柒", "捌","玖"],
        numType = ["", "十", "百", "千"],
        numEnd = ["万", "亿", "兆"];
      let strNum = "";
      let roundEnd = [];
      //是否为小数
      if (String(num).indexOf(".") > -1) {
        strNum = String(num).split(".")[0].split("").reverse();
        roundEnd = String(num).split(".")[1].split("").slice(0, 2);
      } else {
        strNum = String(num).split("").reverse();
        roundEnd = [];
      }
      console.log(strNum);
      let newArray = [];
      for (let i = 0; i < strNum.length; i++) {
        if (i % 4 != 0) {
          newArray.push(numType[i % 4]);
        } else {
          if (i > 3) {
            newArray.push(numEnd[i / 4 - 1]);
          }
        }
        newArray.push(textNum[Number(strNum[i])]);
      }
      let roundText = "";
      if (roundEnd.length > 0 && roundEnd.length == 1) {
        roundText = textNum[roundEnd[0]] + "角";
      } else if (roundEnd.length > 0 && roundEnd.length == 2) {
        roundText = textNum[roundEnd[0]] + "角" + textNum[roundEnd[1]] + "分";
      } else {
        roundText = "";
      }
      console.log(newArray.reverse().join("") + "元" + roundText);
      return(newArray.reverse().join("") + "元" + roundText)
    };

调用方法

let strNum = StringNumbers(12333445532);
console.log(strNum)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值