Solidity

如何在 Truffle 框架中將 BigNumber 轉換為 Number?

  • December 24, 2021

我編寫了一個 ERC20 代幣合約,並使用 truffle 框架將其部署在測試網路中。當我使用 web3 檢查帳戶的令牌餘額時,當我嘗試使用 toNumber() 將其轉換為數字時,它在 BigNumber 中給出了結果,得到了意外的結果。

堅固性程式碼:

 function balanceOf(address _from) constant public returns (uint256 balance) {
   return balances[_from];
}

Javascript程式碼:

instantiateBalance() {
const contract = require('truffle-contract')
const token = contract(Token)
token.setProvider(this.state.web3.currentProvider)
var tokenInstance;
token.deployed().then(function(instance) {
tokenInstance = instance;
return tokenInstance.balanceOf.call("0xb1Cf866ced575FD1A1997Daa5d6F099efb282E41", {from: "0xb1Cf866ced575FD1A1997Daa5d6F099efb282E41"});
}).then(function(balance) {
console.log(balance.toNumber());
})

預期結果

小數 = 18

實際代幣餘額 = 100000000.000000000000000000

實際結果

代幣餘額 = 1000000000000

結果:

如果您的代幣有 18 位小數

就像你可以使用的乙太一樣

then(function(balance) {
   console.log(web3.fromWei(balance.toNumber(), "ether" ) );
})

使用fromWei將您的 bigNumber 轉換為 ether,然後將其轉換為 Number。請注意,浮點數後面不需要的 0 不會顯示。

在 web3 ^1.0 中,它可能會更改為web3.utils.fromWei而不是web3.fromWei doc。請注意,truffle ^5.0 使用 web3 ^1.0。

如果您有不同的令牌小數

假設 6。您必須手動進行轉換,例如:

var tokenBalance = balance.ToNumber() / Math.pow(10, tokenDecimals)

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