Javascript显示货币不四舍五入

Posted

技术标签:

【中文标题】Javascript显示货币不四舍五入【英文标题】:Javascript display currency without rounding 【发布时间】:2017-11-09 02:40:34 【问题描述】:

我在 javascript 中显示货币值,我想在每个值上显示 $,我还想要 ,(逗号)为数千,但我不希望小数点后的数字四舍五入,我也没有固定的小数点后位数的限制。

这是为en-AU

例如

45000 -> 45,000 美元

3.6987 -> 3.6987 美元

3 -> $3

4.00 -> 4.00 美元

是否有任何内置的 JavaScript 方法或库可以帮助实现这一点?

【问题讨论】:

这是一个问答网站。问题是什么?您在哪里尝试自己解决这个问题? 向我们展示你想要所有这些东西的代码? How can I format numbers as dollars currency string in JavaScript?的可能重复 美国 icurrency 的小数位不超过 2 位,因此 $3.6987 不是有效的货币金额,不应显示为 1。最小的美国货币是 1 美分(1 美元的 1/100),将显示为 $0.01。多于两位小数只会让人们感到困惑,因为您假装某物是不是货币的金额。 【参考方案1】:

我建议使用Intl.NumberFormat

var formatter = new Intl.NumberFormat('en-US', 
   style: 'currency',
   currency: 'USD',
   minimumFractionDigits: 2,      
);

formatter.format(3242); /* $3,242.00 */

您可以配置您的 FractionDigits 甚至您的货币符号:

var formatter = new Intl.NumberFormat('en-US', 
   style: 'currency',
   currency: 'GBP',
   minimumFractionDigits: 4,      
);

formatter.format(3242); /* £3,242.0000 */

更新:

如果你不能固定你的小数位数,你可以使用 maximumFractionDigits 并给它一个 20 的数量,同时给 minimumFractionDigits 值 0 :

var formatter = new Intl.NumberFormat('en-US', 
   style: 'currency',
   currency: 'GBP',
   minimumFractionDigits: 0,
   maximumFractionDigits: 20,
);

formatter.format(3242.5454); /* £3,242.5454 */

【讨论】:

@Ali 我更新了答案,使用 maximumFractionDigits 并给它 20 的数量,同时给 minimumFractionDigits 值 0【参考方案2】:

您可以使用toLocaleString 将逗号添加到号码中。

var number = 45000;
var formatted = '$' + number.toLocaleString(); // $45,000

number = 500999.12345;
formatted = '$' + number.toLocaleString(); // $500,999.12345

编辑:为防止舍入,请使用 minimumFractionDigits 选项:

number.toLocaleString(undefined,  minimumFractionDigits: 20 );

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

与this question相关。

【讨论】:

var number = 3.6987; number.toLocaleString() 返回我不想要的 $3.699。 您可以使用minimumFractionDigits 属性来解决这个问题。 它不适用于minimumFractionDigits 集。即使该值被四舍五入。【参考方案3】:

看看accounting.js,它具有将值格式化为货币格式的强大功能。

【讨论】:

accounting.js 中的第一个示例在末尾显示了 2 个额外的零,这是我不想要的。会计.formatMoney(12345678); // $12,345,678.00 使用精度设置增加限制

以上是关于Javascript显示货币不四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

如何将gridview中的货币四舍五入为有效数字?

如何将双精度格式设置为四舍五入到最接近的美元的货币?

js四舍五入不显示.00

PHP number_format():将数字四舍五入,然后格式化为货币

将货币金额四舍五入到最接近的镍、四分之一、1 美元、5 美元等面额的最佳方法是啥?

Javascript 分离和裁剪以及四舍五入