货币的值大于 javascript 的数字可以容纳的值,因此必须对字符串进行所有计算。
我遇到的所有代码都使用parseFloat()
或parseInt()
以某种方式。
例如。以下字符串:
22222222222222222222.222222 将被格式化为 $22,222,222,222,222,222,222.22
编辑:我不能使用第三方库。它目前仅用于显示,但赞赏在 js 中处理大量数字的更通用方法:)
货币的值大于 javascript 的数字可以容纳的值,因此必须对字符串进行所有计算。
我遇到的所有代码都使用parseFloat()
或parseInt()
以某种方式。
例如。以下字符串:
22222222222222222222.222222 将被格式化为 $22,222,222,222,222,222,222.22
编辑:我不能使用第三方库。它目前仅用于显示,但赞赏在 js 中处理大量数字的更通用方法:)
只要您使用的数字是一个字符串,那么这应该可以工作。
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 在本主题中提供的上一个问题的答案
我建议查看一个库来执行此操作,因为浏览器支持以及许多其他问题可能会很痛苦。你可以看看: http: //josscrowcroft.github.io/accounting.js/或者你可以看到这个答案How can I format numbers as money in JavaScript? 此外,如果您想自己处理大量数字,可以使用 BigInt 和其他类型库,但其中许多都有错误。为了提高准确性,最容易完成大部分逻辑服务器端。
您可以拆分字符串,然后以您自己的格式重建它。
首先用“。”分割。char,这将分隔小数。
然后用 "" 分割,给你一个包含所有单个数字的数组。
现在是找出逗号放在哪里的问题,您可以计算模数,如下所示:
var mod = digitArray.length % 3
这本质上是第一个逗号的偏移量,其余的将每 3 位添加,例如,在 13 位数字中,第一个逗号将在第一个数字之后(13 % 3 = 1),例如:
1234567890123 -> 1,234,567,890,123
不要忘记在最后附加小数。