如何在Javascript中格式化(真正的)大数字
How to format (really) big numbers in Javascript?
我想要像库JavaScript BigNum和Numeral.js这样的东西一起工作。
在Numeral.js中,我可以使用这样的字符串:
var number = numeral('1110000000000000000000000000000000000000000000000000011100000000000000000011111111100');
但number.format();
的结果确实令人失望:
"1.11e+84"
有什么方法可以很好地格式化一个(真正的)大数字吗?
编辑:我不想回避科学记数法,这是一个错误的假设。我想"很好地"格式化,正如我所希望的,例如:
var number = numeral(1000);
numeral.defaultFormat('$0,0.00');
number.format();
// '$1,000.00'
好吧,如果数字很大:
var number = numeral('100000000000000000000000000');
"$9.999999999999999e+25"
这真是一团糟。我知道JavaScript不能处理大数字,但我的问题是正是,因为这一点!我想要一个图书馆或这个问题的可能解决方案。
如果您只支持最近的浏览器,我认为只使用Intl.NumberFormat.就足够了
尽管你在大数字上失去了精度,但它将帮助你很容易地显示大数字和货币:
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
您可以使用Intl.NumberFormat.prototype.format、String.protype.slice()、String.protoype.contat()
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);
如果您希望像"111000000000000000000000000000000000011100000000000000000011111111100"这样的数字在处理和打印时不会丢失精度,您可以:
-
将此数字存储为字符串,永远不要转换为数字。缺点很明显:您将无法使用字符串表示中的数字执行算术运算。
-
你可以使用一个大数字库,例如大数字(https://www.npmjs.com/package/big-numbers)。这将允许您执行计算,并且不会丢失精度。
示例代码:
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
相关文章:
- 使用全局变量来存储数字(JavaScript)
- 字符串到数字JavaScript
- 查找总和最大的数字(Javascript)
- 将字符串中的重复字符替换为不断增长的数字 [Javascript]
- 选择下拉选项时显示数字-javascript
- 用户在数字上输入金额,然后输出最高数字javascript
- 字母数字 JavaScript 正则表达式失败
- 仅数字 Javascript 表单验证
- 如何从一组特定的数字中找到最接近的更高数字:javascript
- 将字符串 num 转换为数字 JavaScript
- 将字符串转换为数字 Javascript
- 提取两种模式之间的数字 javascript
- 添加两个十六进制数字 javascript 与位移
- 确定是否按下了字母或数字-Javascript
- 可以't将字符串转换为数字javascript我的代码出了什么问题
- 按布尔值,然后按数字(javascript)对对象数组进行排序
- 正则表达式,用于获取方括号之间的字符串和数字-javascript
- If和Else比较数字JavaScript
- 检查变量是网页上的所有数字javascript
- 同时检查模为0的两个不同数字(Javascript)