为什么 BigNumber 与 etherjs 返回 0

问题描述

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

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

  console.log(cost.toString());

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

为什么?我做错了什么?

解决方法

据我所知,Ethers 的 BigNumber 只能处理大整数。文档中没有提到小数值或精度或小数位数,所有这些都是您希望在处理小数值的库中看到的。另外,文档提到它目前在 Promise::new(env::current_account_id()).delete_account(beneficiary_address); 的实现中使用 BN.jsaddress(0) 不处理小数值。来自其文档:

注意:此库不支持小数。

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

给你几个选择:

  1. 您可以使用您需要的精度倍数的单位。例如,如果您需要小数点右侧的两位精度,您可以使用乘以 100 的值。然后除以 100 得到整个输出部分,并对 100 进行余数运算以得到获取输出的小数部分(如果需要,使用前导 def func1(n1,n2): print(f'{n1} is greater than {n2}' if (n1> n2) else f'{n1} is greater than {n2}') print("Find which number is greater") num1 = int(input("Enter the first number: ")) num2 = int(input("Enter the second number: ")) func1(num1,num2) 进行格式化)。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...