Javascript 货币格式化函数

平时我们有可能遇到需要把网站中的数字(通常是价格)用一种统一的方式显示出来,比如每隔3个字符加一个空格。如果数值比较大的话这种方法很有利于用户阅读。

 

用XSLT的朋友可能知道在XSL中可以用如下代码实现

 

<xsl:decimal-format name="currency" decimal-separator="." grouping-separator=" "/>

 

今天研究了一下,写了一个对应的javascript代码.

 

有趣的部分是方法二是用正则表达式实现的,非常明了!

 

 

function currencyFormatter(oNum,decimalSeparator,groupingNumber,groupingSeparator){

    //check type

    if(isNaN(parseFloat(oNum))){

        alert(oNum + 'is not a number!');

        return "";

    }

    //get sign and make oNum to abstract

    var sign = (oNum == (oNum = Math.abs(oNum)));

 

    //get fraction

    var nDecimalString = oNum + '';

    var nIndex = nDecimalString.indexOf('.');

    var sFraction = '';

    if(nIndex != -1){

        sFraction = nDecimalString.substr(nIndex);

    }

 

    //get integer

    var nInteger = parseInt(Math.floor(oNum));

    var nInegerString = nInteger + '';

 

    //insert separator

    var aResult = [];

    //method 1

    /*

    var length = nInegerString.length;

    for (var i=length; i > 0 ; i-=groupingNumber) {

        var nextI = i - groupingNumber;

        if(nextI <= 0){

            break;

        }

        aResult.unshift(nInegerString.substring(nextI,i));

        aResult.unshift(groupingSeparator);

    };

    if(nextI <= 0){

        aResult.unshift(nInegerString.substring(nextI,i));

    }

    */

 

    //method 2

    aResult = nInegerString.split("");

    aResult = aResult.reverse();

    var exp= new RegExp("(//d{"+groupingNumber+"})",'g');

    aResult = aResult.join('').replace(exp,'$1'+groupingSeparator)

    aResult = aResult.split('');

    aResult = aResult.reverse();

 

    //put things together

    var sReturn = ((sign)?'':'-') + aResult.join('') + sFraction;

    if(decimalSeparator){

        sReturn = sReturn.replace(".",decimalSeparator);

    }

    return sReturn;

}

例子:

 

currencyFormatter(-1234567890.323234,',',3,',') 

 

结果 -1,234,567,890,323234

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值