3

货币的值大于 javascript 的数字可以容纳的值,因此必须对字符串进行所有计算。

我遇到的所有代码都使用parseFloat()parseInt()以某种方式。

例如。以下字符串:
22222222222222222222.222222 将被格式化为 $22,222,222,222,222,222,222.22

编辑:我不能使用第三方库。它目前仅用于显示,但赞赏在 js 中处理大量数字的更通用方法:)

4

3 回答 3

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 在本主题中提供的上一个问题的答案

于 2013-08-27T14:11:06.890 回答
1

我建议查看一个库来执行此操作,因为浏览器支持以及许多其他问题可能会很痛苦。你可以看看: http: //josscrowcroft.github.io/accounting.js/或者你可以看到这个答案How can I format numbers as money in JavaScript? 此外,如果您想自己处理大量数字,可以使用 BigInt 和其他类型库,但其中许多都有错误。为了提高准确性,最容易完成大部分逻辑服务器端。

于 2013-08-27T14:07:14.687 回答
1

您可以拆分字符串,然后以您自己的格式重建它。

首先用“。”分割。char,这将分隔小数。

然后用 "" 分割,给你一个包含所有单个数字的数组。

现在是找出逗号放在哪里的问题,您可以计算模数,如下所示:

var mod = digitArray.length % 3

这本质上是第一个逗号的偏移量,其余的将每 3 位添加,例如,在 13 位数字中,第一个逗号将在第一个数字之后(13 % 3 = 1),例如:

1234567890123 -> 1,234,567,890,123

不要忘记在最后附加小数。

于 2013-08-27T14:10:20.237 回答