为什么下面的代码会返回小数部分的错误?它似乎只在低平衡时触发。
如果我的余额是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
2条答案
按热度按时间yacmzcpb1#
使用
toFixed(n)
var stakedAmount = (fixedBalance * 0.50).toFixed(6) ;
n
定义为您需要的小数位的最大精度。我任意选择了6,但这条评论表明你可能会上升到18?
toFixed(n)
也会将您的数字转换为字符串,以便您可以删除toString()
。我认为这是因为你的浮点数有太多的小数位,不能用
BigNumber
来表示,因此,你需要截断小数位的精度。对于后人和通过搜索引擎来到这里的人,我收到的完整追溯是:
这很有趣,因为我刚才也犯了类似的错误。在你之后的几个小时。
This issue,this issue和这个代码片段帮助我弄清楚了。
rekjcdws2#
如果USDT支持
6 decimals
,而我的输入是153.60000000000002
(超过6个十二位),则会导致上溢/下溢错误。我是这样解决的: