javascript - 带有逗号和小数的正确 JS 货币格式

标签 javascript decimal calculator currency number-formatting

我已经在这里和其他地方浏览了 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);
}

如果我尝试使用它:

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", "");
    }

}

它根本不起作用。

我做了另一个测试:

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;
  });
}

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

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

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;
}

然后我像这样使用它:

document.Rate.RATE.value=addCommas(FormatAsMoney(dasum));

这似乎是我迄今为止最好的结果,但是在第 (163) 行,例如,function dosum() 取决于许多 if 语句,它再次中断了。我似乎无法让它适用于值以千为单位的所有适用领域。

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

谁能结束我的痛苦?感谢您的帮助。

最佳答案

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

jsFiddle Demo

(1234568).toLocaleString("en-US", {style: "decimal", minimumFractionDigits: 2});

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

(1234568).toLocaleString("en-US", {style: "decimal", minimumFractionDigits: 0});

我喜欢 NickG's comment from mid-2013:“同意,它还没有完全支持所有浏览器(目前),但它仍然是一个解决方案。(可以说是最有效的解决方案,因为它向前兼容不受支持的浏览器浏览器,它是 Javascript api 的文档化功能。)

来源:

jsFiddle Demo

How can I format numbers as money in JavaScript?

How to print a number with commas as thousands separators in JavaScript

关于javascript - 带有逗号和小数的正确 JS 货币格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664926/

相关文章:

javascript - react : Updated values is not coming in React-popup

javascript - 使用 grunt-contrib-proxy 重定向

c# - 从 C# 到 SQL Server 的精度损失

swift - 有没有更有效的方法来在 Swift 中构建这种基于年龄组的 z 分数计算?

任意长度和精度的 C 计算器(实数)

java - 如何使用正则表达式分割字符串并插入到ArrayList中?

javascript - JavaScript 函数调用方式的性能问题

javascript - Dojo 扩展 dojo.dnd.Source,移动没有发生。有想法吗?

c++ - 在 C++ 中获取 DECIMAL(10,2) 并显示它?

c# - 从 DataReader 解析小数