问题描述
我正在使用 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.js
。 address(0)
不处理小数值。来自其文档:
注意:此库不支持小数。
这不是很清楚(大多数示例都是十进制的),它们可能意味着不支持小数值。
给你几个选择:
-
您可以使用您需要的精度倍数的单位。例如,如果您需要小数点右侧的两位精度,您可以使用乘以 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)
进行格式化)。