Hardhat
在安全帽測試中將大數字轉換為數字
對不起新手問題。有很多解決方案,但沒有一個對我有用。我得到一個帳戶的餘額
const balance_before = await ethers.provider.getBalance(redeemer.address);
返回
balance_before
的是BigNumber { _hex: '0x021e0bf99fe8b4390000', _isBigNumber: true }
我想將其轉換為普通數字。當我嘗試時
console.log(balance_before.toNumber())
,出現以下錯誤:Error: overflow (fault="overflow", operation="toNumber", value="9998998184576000000000", code=NUMERIC_FAULT, version=bignumber/5.3.0)
我可以使用
.toString()
此返回9998998184576000000000
,但以字元串格式使用,我需要將此值與數字進行比較,因此它沒有用。如何將 轉換balance_before
為數字?PS:我正在用安全帽和柴測試這個。
你得到一個溢出錯誤,因為 javascript 不能足夠準確地表示這個數字。即使您能夠將其轉換為數字,由於不精確,將其與任何其他數字進行比較也不可靠。
這實際上正是 BigNumbers 的用途。所以不要轉換它並比較它,而是使用 BigNumber 的比較運算符:https ://docs.ethers.io/v5/api/utils/bignumber/ 您可以使用:
a.lt(b) a.lte(b)
舉個例子