【问题标题】:Why is BigNumber with etherjs returning 0为什么带有etherjs的BigNumber返回0
【发布时间】:2021-05-01 07:27:30
【问题描述】:

我正在使用 etherjs 的 BigNumber,我正在执行这个非常简单的操作:

const cost = BigNumber.from(3)
    .div(BigNumber.from(1000))
    .mul(BigNumber.from(3));

  console.log(cost.toString());

它输出'0',但应该是0.09。

为什么?我做错了什么?

【问题讨论】:

  • 旁注:你知道JavaScript现在有一个原生的大整数类型BigInt吗?几乎在所有环境中都受支持(不是 IE11,但甚至 Microsoft 也不再支持 IE)。您可以使用您需要的精度倍数的单位。例如,如果您需要小数点右侧的两位精度,您将使用大小为 100 倍的值。然后划分输出。

标签: javascript ether


【解决方案1】:

据我从文档中得知,Ethers 的BigNumber 只处理大的整数。文档中没有提到小数值或精度或比例,所有这些都是您希望在处理小数值的库中看到的。另外,文档提到它目前在其实现BigNumber 时使用BN.jsBN.js 不处理小数值。从其文档中:

注意:此库不支持小数。

这不是很清楚(大多数示例都是十进制的),它们可能意味着不支持 小数 值。

几个选项供您选择:

  1. 您可以使用您所需精度的倍数的单位。例如,如果您需要小数点右侧的两位精度,您将使用乘以 100 的值。然后除以 100 以获得整个输出部分,并对 100 执行余数运算以获取输出的小数部分(如果需要,使用前导 0 格式化)。

  2. 有几个用于处理小数值的大数库,例如 bignumberbig.js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 2022-01-23
    • 1970-01-01
    • 2011-03-01
    • 2011-07-01
    • 2011-01-17
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多