zoukankan      html  css  js  c++  java
  • JS-为金额添加千分位逗号分割符

    前言:这个功能在前端页面中使用的还是比较多的,正好我们的项目中也有使用此功能,不过YY同学写的代码不像个方法的样子,一个入口中间又插了几道子,所             以,我写了下面这个方法,经过测试,适用性还是蛮好的,留在这里以备后用!

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8"/>
        <title>Format Currency</title>
        <style>
           input{width:360px;}
        </style>
        <script>
            /*
              获取第一个输入框中数据,格式化后放入第二个输入框进行展示
            */
            function showNewNum() 
            {
               //获取输入的数据
               var value = document.getElementById('num').value;
               //将格式化的数据放入到新的输入框中显示
               document.getElementById('newNum').value = formatCurrency(value);
            }
            /*
              格式化数据,小数部分不做处理,对整数部分进行千分位格式化的处理,如果有符号,正常保留
            */
            function formatCurrency(num) 
            {
                if(num)
                {
                    //将num中的$,去掉,将num变成一个纯粹的数据格式字符串
                    num = num.toString().replace(/$|\,/g,'');
                    //如果num不是数字,则将num置0,并返回
                    if(''==num || isNaN(num)){return 'Not a Number ! ';}
                    //如果num是负数,则获取她的符号
                    var sign = num.indexOf("-")> 0 ? '-' : '';
                    //如果存在小数点,则获取数字的小数部分
                    var cents = num.indexOf(".")> 0 ? num.substr(num.indexOf(".")) : '';
                    cents = cents.length>1 ? cents : '' ;//注意:这里如果是使用change方法不断的调用,小数是输入不了的
                    //获取数字的整数数部分
                    num = num.indexOf(".")>0 ? num.substring(0,(num.indexOf("."))) : num ;
                    //如果没有小数点,整数部分不能以0开头
                    if('' == cents){ if(num.length>1 && '0' == num.substr(0,1)){return 'Not a Number ! ';}}
                    //如果有小数点,且整数的部分的长度大于1,则整数部分不能以0开头
                    else{if(num.length>1 && '0' == num.substr(0,1)){return 'Not a Number ! ';}}
                    //针对整数部分进行格式化处理,这是此方法的核心,也是稍难理解的一个地方,逆向的来思考或者采用简单的事例来实现就容易多了
                    /*
                      也可以这样想象,现在有一串数字字符串在你面前,如果让你给他家千分位的逗号的话,你是怎么来思考和操作的?
                      字符串长度为0/1/2/3时都不用添加
                      字符串长度大于3的时候,从右往左数,有三位字符就加一个逗号,然后继续往前数,直到不到往前数少于三位字符为止
                     */
                    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
                    {
                        num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
                    }
                    //将数据(符号、整数部分、小数部分)整体组合返回
                    return (sign + num + cents);    
                }
    
            }
        </script>
    </head>
    <body bgcolor="AliceBlue" align="center">
        <input id="num" class=""/><br/>
        <input id="newNum" class=""/><br/>
        <input type="button" value="Please click ME" onclick="showNewNum();"/>
    </body>
    </html>
  • 相关阅读:
    VSTO不能创建OFFICE 文档项目的原因
    vs2016 创建 vsto excel 文件项目的一个问题
    一个开发原则:永远不要返回NULL
    客户为什么习惯变更需求
    从实际项目中的一个改进细节谈程序的易用性优化
    第三方系统打开EAFC的实现
    功能间(两个form)数据交互的编程方法
    关于行军模式大批量数据的审批的实现
    程序的升级发布管理
    转:从如何判断浮点数是否等于0说起——浮点数的机器级表示 献给依然 if ( double i ==0.00)的菜鸟们
  • 原文地址:https://www.cnblogs.com/godtrue/p/5806914.html
Copyright © 2011-2022 走看看