适当的JS货币格式,带逗号和小数

Zac*_*uem 0 javascript currency decimal calculator comma

我在这里和其他地方浏览了无数线程超过2天,我无法让它正常工作.

我有一个计算器完全按照我需要的方式工作,但是,我似乎无法完成最后一件事.逗号分隔符由千位带小数.

我有小数位,但不能添加逗号.当我添加逗号时,我可以在计算中断之前获得一个或两个字段,或者值显示为NaN.

这是工作页面:http://codepen.io/anon/pen/Fauzy

它目前使用这个:

function FormatAsMoney(mnt) {
mnt -= 0;
mnt = (Math.round(mnt*100))/100;
return (mnt == Math.floor(mnt)) ? mnt + '.00'
: ( (mnt*10 == Math.floor(mnt*10)) ?
mnt + '0' : mnt);
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用这个:

function FormatAsMoney(x)

        {


            var money_value;

            mnt = x.value;

            mnt = mnt.replace(/\,/g,'');

            mnt -= 0;

            mnt = (Math.round(mnt*100))/100;

            money_value = (mnt == Math.floor(mnt)) ? mnt + '.00' : ( (mnt*10 == Math.floor(mnt*10)) ? mnt + '0' : mnt);

            if (isNaN(money_value))
            { 
                money_value ="0.00";

            }else{
        money_value = CommaFormatted(money_value);      
        x.value = money_value.replace(".00", "");
    }

}
Run Code Online (Sandbox Code Playgroud)

它根本不起作用.

我做了另一个测试:

function FormatAsMoney(str) {
  return (str + "").replace(/\b(\d+)((\.\d+)*)\b/g, function(a, b, c) {
    return (b.charAt(0) > 0 && !(c || ".").lastIndexOf(".") ? b.replace(/(\d)(?=(\d{3})+$)/g, "$1,") : b) + c;
  });
}
Run Code Online (Sandbox Code Playgroud)

我在第一个字段中获得逗号格式,但丢失小数,并且不会继续任何其他计算.

作为另一个例子,我创建了另一个函数来添加逗号,如:

function addCommas(nStr){
    nStr += '';
    c = nStr.split(','); // Split the result on commas
    nStr = c.join('');  // Make it back to a string without the commas
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}
Run Code Online (Sandbox Code Playgroud)

我然后使用它像:

document.Rate.RATE.value=addCommas(FormatAsMoney(dasum));
Run Code Online (Sandbox Code Playgroud)

这似乎是我所拥有的最好的结果,但是在第(163)行,例如,它 function dosum()取决于许多if语句,它再次打破了.我似乎无法让它适用于价值数千的所有应用领域.

我需要能够以2000万美元"20000000"输入"保险金额"(作为一个例子,因为它将填充几乎所有可能具有逗号分隔值和小数位的字段)

谁能结束我的痛苦?谢谢你的帮助.

cra*_*wap 5

在尝试了许多不同的解决方案后,这对我来说似乎是最好的方式:

jsFiddle Demo

(1234568).toLocaleString("en-US", {style: "decimal", minimumFractionDigits: 2});
Run Code Online (Sandbox Code Playgroud)

要么

var opts = '{style: "decimal", currency: "USD", minimumFractionDigits: 2}';
(1234568).toLocaleString("en-US", opts);
Run Code Online (Sandbox Code Playgroud)

要么

(1234568).toLocaleString("en-US", {style: "decimal", minimumFractionDigits: 0});
Run Code Online (Sandbox Code Playgroud)

从2013年年中开始喜欢NickG的评论:"同意,它尚未得到所有浏览器的全面支持,但它仍然是一个解决方案.(可以说是最有效的解决方案,因为它向前兼容不支持的浏览器,而且它是Javascript api的文档功能.) "

资料来源:

jsFiddle演示

如何在JavaScript中将数字格式化为金钱?

如何使用逗号作为千位分隔符在JavaScript中打印数字