首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Javascript中格式化(真正的)大数字?

如何在Javascript中格式化(真正的)大数字?
EN

Stack Overflow用户
提问于 2015-02-25 00:04:13
回答 3查看 2.7K关注 0票数 1

我想要像JavaScript BigNumNumeral.js这样的库一起工作。

在Numeral.js中,我可以使用如下字符串:

代码语言:javascript
运行
复制
var number = numeral('1110000000000000000000000000000000000000000000000000011100000000000000000011111111100');

number.format();的结果确实令人失望:

代码语言:javascript
运行
复制
"1.11e+84"

有办法很好地格式化一个(真的)大数字吗?

编辑:,我不想只回避科学符号,这是一个错误的假设。我希望按照我想要的格式“很好”,例如:

代码语言:javascript
运行
复制
var number = numeral(1000);
numeral.defaultFormat('$0,0.00');

number.format();
// '$1,000.00'

好吧,如果数字很大:

代码语言:javascript
运行
复制
var number = numeral('100000000000000000000000000');
"$9.999999999999999e+25"

这真是一团糟。我知道JavaScript不能处理大数字,但我的问题是正是,因为那!我想要一个图书馆或解决这个问题的可能方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-07 16:39:49

如果您只支持最近的浏览器,我认为只使用Intl.NumberFormat就足够了。

虽然它在大数字上失去了精确性,但它将帮助您很容易地显示大数字和大货币:

代码语言:javascript
运行
复制
var number = 1234567890123456789012345678901234567890;

console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
// → 1.234.567.890.123.460.000.000.000.000.000.000.000.000,00 €

console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(number));
// → ¥1,234,567,890,123,460,000,000,000,000,000,000,000,000

票数 1
EN

Stack Overflow用户

发布于 2017-07-07 15:40:34

您可以使用Intl.NumberFormat.prototype.format、String.prototype.slice()、String.prototype.concat()

代码语言:javascript
运行
复制
var number = 2.9364136545300044e+24;
var n = new Intl.NumberFormat().format(number);
var res = n.slice(0, 9).concat(".").concat(n.slice(10, 12));
console.log(res);
票数 0
EN

Stack Overflow用户

发布于 2018-07-23 08:41:31

如果您希望处理和打印像'1110000000000000000000000000000000000000000000000000011100000000000000000011111111100‘这样的数字而不丢失精度,您可以:

  1. 将此数字存储为字符串,永远不要转换为数字。缺点在这里很明显:您将无法使用字符串表示中的数字执行算术操作。
  2. 您可以使用一个大数字库,例如大数字(https://www.npmjs.com/package/big-numbers)。这将允许您执行计算,并且不会丢失精度。

示例代码:

代码语言:javascript
运行
复制
var bn = new BugNumbers();
var longNumber = bn.of('1110000000000000000000000000000000000000000000000000011100000000000000000011111111100');

var longNumberPlusOne = longNumber.add(1);

// Should pring1110000000000000000000000000000000000000000000000000011100000000000000000011111111101
console.log(bn.format(longNumberPlusOne));

查看文档以获取详细信息:http://www.bignumbers.tech

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28708787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档