【问题标题】: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

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

【问题讨论】:

    标签: javascript npm web3


    【解决方案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) 再次获得“精确”结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多