为什么 BigNumber 和 etherjs 返回 0

Ste*_*lec 1 javascript ether

我正在使用BigNumberetherjs,并且正在执行这个非常简单的操作:

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

  console.log(cost.toString());
Run Code Online (Sandbox Code Playgroud)

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

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

T.J*_*der 6

据我从文档中可以看出, EthersBigNumber只处理大整数。文档中没有提到分数值或精度或小数位数,所有这些都是您希望在处理分数值的库中看到的。另外,文档提到它目前BN.jsBigNumber. BN.js不处理小数值。从它的文档来看:

注意:该库不支持小数。

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

有几个选项供您选择:

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

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