Hardhat

在安全帽測試中將大數字轉換為數字

  • March 17, 2022

對不起新手問題。有很多解決方案,但沒有一個對我有用。我得到一個帳戶的餘額

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)

舉個例子

引用自:https://ethereum.stackexchange.com/questions/124048