Javascript实现阿拉伯数字转大写(区分小数整数)

这篇博客介绍了如何使用JavaScript将阿拉伯数字转化为大写,特别处理了整数和小数的情况,包括小数点后的两位。代码逻辑分为整数和小数两部分,对于小数,还考虑了不同格式的数字,如0.1、0.10等。示例中使用的单位是'份',适应金融行业的'份额'概念,但可以按需修改。作者指出代码简化和规范性有待提升,欢迎读者提供改进建议。

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

逻辑介绍

  

  1. 代码总体区分为两大块,一个是传入的是整数(用Interger()函数处理);当传入的是小数时(处理到小数点后2位),则将小数拆分为整数部分和小数部分分别处理;
  2. 当传入的是小数时候,存在几种类型的数字,比如:0.1、0.10、00.12、00.00等等这类似的数据,代码中做了特殊判断和处理(parseFloat()
  3. 该demo的单位是“份”,可能很多人不知道,这是金融行业中名词“份额”的一个单位,若有别的场景需要该代码逻辑,修改单位即可。
  4. demo写的比较简单,命名和格式很多地方都不太规范,代码逻辑也不够简洁,若有建议,欢迎提出!下面连同HTML的input测试框贴出代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
   <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
   <title>转换测试</title>
</head>
<body>
<div>
   <input type="text" name="haha" id="one" onkeyup=exchange()>
    <input type="text" name="heihei" id="two">
</div>
</div>

</body>
<script type="text/javascript">

   function exchange(){


      var m = document.getElementById("one").value;

      function ToString(m) { 

         n = Number(m) + '';

        var indexpoint = n.indexOf('.');  


        if (indexpoint > 12 && m.length - indexpoint == 2) {

            return Number(n).toLocaleString() +'0';
        }

        if (indexpoint > 12 && m.length - indexpoint >= 3) {

            return Number(n).toLocaleString();
        }

         integerpart = n.substring(0, indexpoint);  //整数部分

        if (indexpoint >= 0){
         removezore = parseFloat(n);


         if (removezore == integerpart) {

            return Interger(integerpart);
         }

         decimalpart = n.substr(indexpoint+1,2);  //小数部分
         var  strinterger = '', strdecimal = '';

         strinterger = Interger(integerpart);  //整数部分的转换直接调用转化整数的函数

         removefen = strinterger.substring(0, strinterger.length-1); //得到结果后去掉份整数部分的单位“份”

          for (var j=0; j < decimalpart.length; j++){

         strdecimal += '零壹贰叁肆伍陆柒捌玖'.charAt(decimalpart.charAt(j));  //取得小数部分的大写

         }


         return removefen +'点' +strdecimal + '份';


        }else{

                return Interger(n);

            }

        }

        function Interger(n){

               if (n.length > 12) {
                  comma = Number(n).toLocaleString();
                  comma += ".00";
                  return comma;
               }

               var unit = "千百拾亿千百拾万千百拾份", str = "";

               cutunit = unit.substr(unit.length - n.length);
               for (var i=0; i < n.length; i++){

                     str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + cutunit.charAt(i);  
               }

               result =  str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|份)/g, "$1"); 

               if(result.length != 1){

                  return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|份)/g, "$1");
               }else{

                  return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零");
               }

            }



      var rs = ToString(m);

      document.getElementById("two").value = rs;


       }
</script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值