货币的价值大于javascript的数字所能容纳的价值,因此必须为字符串完成所有计算。
我遇到的所有代码都以某种方式使用parseFloat()
或parseInt()
。
EG。以下字符串:
22222222222222222222.222222格式为
$ 22,222,222,222,222,222,222.22
答案 0 :(得分:3)
只要你使用的数字是一个字符串,那么这应该有效。
var result = numberWithCommas("22222222222222222222.282222");
function numberWithCommas(x) {
var parts = x.toString().split(".");
parts[1] = parts[1].substr(0,2);
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(".");
}
JSFiddle:http://jsfiddle.net/markwylde/XNS6T/1/
这是基于mikez302在this topic
中提供的上一个问题的答案答案 1 :(得分:1)
我建议查看一个库来执行此操作,因为浏览器支持许多其他问题,这可能是一个真正的痛苦。您可以查看:http://josscrowcroft.github.io/accounting.js/或者您可以看到这个答案How can I format numbers as money in JavaScript?此外,如果您想自己使用大数字,那么有BigInt和其他类型库,但其中许多都有错误。为了更好的准确性,最简单的做这个逻辑服务器端。
答案 2 :(得分:1)
您可以拆分字符串,然后以您自己的格式重建它。
首先按“。”分组。 char,这将分开小数。
然后用“”分割给你一个包含所有个别数字的数组。
现在要找出逗号的位置,你可以计算模数,如下:
var mod = digitArray.length % 3
这实际上是第一个逗号的偏移量,其余的将每3个数字添加一次,例如,在第一个数字后面的第一个逗号(13%3 = 1)的13位数字,例如:
1234567890123 -> 1,234,567,890,123
不要忘记最后添加小数。