除大数时有没有办法获得更精确的结果?

Posted

技术标签:

【中文标题】除大数时有没有办法获得更精确的结果?【英文标题】:Is there a way to get more precise result when dividing Big Number? 【发布时间】:2019-07-28 14:15:44 【问题描述】:

我需要对 Big Numbers 进行操作,但我需要精确的结果,如下所示:

const BN = require('bn.js');
var a = 11060622312717714974
var b = 1570481433500000000000;
console.log(a/b); //0.0070428227146040415

当我使用大数字时,我只得到0,没有精度:

var aBN = new BN('11060622312717714974');
var bBN = new BN('1570481433500000000000');
console.log(aBN.div(bBN).toString()); //0

这个库可以得到精确的结果吗?

【问题讨论】:

【参考方案1】:

不熟悉该库,但查看README.md 文件,它说:

注意:此库不支持小数。

所以,根据这个,答案是否定的。

见https://github.com/indutny/bn.js/#usage。

【讨论】:

有没有可能通过告诉 javascript(显式或隐式)我们希望我们的结果是内置的 Number 类型而不是 no-decimals-for-you 来解决这个问题BN 类型?【参考方案2】:

精确是计算机科学中一个有趣的词,JavaScript 也不例外。

注意 输入输出 相比:

console.log( 11060622312717714974 )

你并不总是得到你想要的。

还有这样的情况:

console.log( .1 + .2 );
console.log(  (.1 + .2) === .3 );

所以,可能不是您想听到的,但事先知道这一点,您可以也许解决它。

不管怎样,结帐https://github.com/MikeMcl/bignumber.js/

【讨论】:

@johnerfx 一个常见的解决方法是乘以你的浮点数(乘以 10^x,其中 x 是小数点后的位数),进行除法,然后除(除以 10 ^x) 再次获得“精确”结果。

以上是关于除大数时有没有办法获得更精确的结果?的主要内容,如果未能解决你的问题,请参考以下文章

Swiftui 移除滑动删除功能

有没有办法获得一个唯一的 id 来识别 Chromecast 设备?

是否有可能获得更精确的反向地理编码?

如何使用 YouTube iframe 获得更精确的当前、视频和开始时间?

使用 EZAudio 从 FFT 获得更精确的频率?

应该按啥顺序添加浮点数以获得最精确的结果?