如何在JS中将大字符串(不是数字)格式化为货币?

时间:2013-08-27 14:01:18

标签: javascript

货币的价值大于javascript的数字所能容纳的价值,因此必须为字符串完成所有计算。

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

EG。以下字符串:
22222222222222222222.222222格式为 $ 22,222,222,222,222,222,222.22

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

3 个答案:

答案 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

不要忘记最后添加小数。