【发布时间】:2015-06-25 14:52:06
【问题描述】:
我的问题是我必须在javascript中使用大数字(大小数)进行计算,例如:
1.1e-40 + 1.1e-40
Javascript 最多只支持 16 位的精度。所以我恢复到 MikeMcl bignumber.js 的库
As explained in the API,执行您所做的计算:
var y1 = new BigNumber(1.1e-40)
var y2 = new BigNumber(1.1e-40)
var yy = y1.plus(y2);
但是,yy 返回一个带有
的对象c: [220], e: -40 and s: 1
我怎样才能用它来取回原来的号码?
例如,我尝试过:yy.c * Math.pow(10, yy.e),但这会导致舍入错误:2.1999999999999998e-38。
【问题讨论】:
-
如果您能够获得“原始”号码,那么一开始就没有理由使用 BigNumber。还有mikemcl.github.io/bignumber.js/#toN(但这当然也无济于事)。也许你想要mikemcl.github.io/bignumber.js/#toS?
-
我不知道你在问什么。你知道 JS 不能代表一些数字,但你还在努力?
-
我认为如果您必须将数字返回到“JS-land”中,您可能必须将其四舍五入到 JS 可以表示的值。根据您的需要,另一种选择是将其作为字符串持久化。
-
你得到的只是另一个 BigNumber 对象。是要“取回原数”来存储或显示,还是要进行进一步的计算?
-
@FelixKling 这不是真的。从数学上讲,您可能确定结果 是 可以用 53 位表示,但中间操作不是。例如,考虑模运算。所以有理由使用 BigNumber 但将结果转换为 Number。
标签: javascript bignum bignumber.js