错误:小数部分超过了 EithersJS 中的小数

Hei*_*erg 2 javascript blockchain ethers.js

为什么以下代码会因超过小数而返回小数部分错误?它似乎只在低平衡时触发。

如果我的余额是 0.1 以太币或 BNB,我不会看到错误,但如果我的余额是 0.0001,我会看到此错误

错误:小数部分超过小数

var account = accounts[0]
var yourBalance = await provider.getBalance(account)
var fixedBalance= ethers.FixedNumber.fromValue(yourbalance , 18);
var stakedAmount = (fixedBalance * 0.50).toString();
var finalOutput = ethers.utils.parseUnits(stakedAmount , 18);  //this returns Error: fractional component exceeds decimals
Run Code Online (Sandbox Code Playgroud)

Tom*_*iwa 8

使用toFixed(n)

var stakedAmount = (fixedBalance * 0.50).toFixed(6) ;

n定义为小数点所需的最大精度。

我随意选择了 6 个,但此评论表明您可能会选择 18 个?

toFixed(n)还将您的号码转换为字符串,以便您可以删除toString().

我认为这是因为您的浮点数有太多小数位无法表示BigNumber,因此您需要截断小数位的精度。

对于后代和通过搜索引擎来到这里的人们,我收到的完整回溯是:

Error: fractional component exceeds decimals
 (fault="underflow", operation="parseFixed", code=NUMERIC_FAULT, version=bignumber/5.5.0)
Run Code Online (Sandbox Code Playgroud)

这很有趣,因为我刚才确实遇到了类似的错误。比你晚几个小时。

这个问题这个问题和这个代码片段帮助我解决了这个问题。