1

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

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

  console.log(cost.toString());

它输出“0”,但应该是 0.09。

为什么?我究竟做错了什么?

4

1 回答 1

2

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

注意:此库不支持小数。

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

几个选项供您选择:

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

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

于 2021-05-01T07:38:50.167 回答