solidity - 为什么方法返回数组而不是数字或字符串?
问题描述
我试图通过 Metamask 中的 web3 从solidity 合约中获取数据。我不明白。为什么我得到数组而不是数字或字符串?也许你知道从以太坊合约中获取正常数据的其他方法吗?考虑我的代码:
let contractAddress = $("#addressContract").val();
instaceContract = web3.eth.contract(contract.abi);
contractInstance= instaceContract.at(contractAddress);
contractInstance.name.call((err, result)=>{
if(!err){
console.log('Name ', result)
} else {
console.log(err);
}
});
contractInstance.decimals.call((err, result)=>{
if(!err){
console.log('Decimals ', result)
} else {
console.log(err);
}
});
解决方案
is BigNumber 表示法。
Solidity 使用大数字来保证精度。Javascript 数字有一个浮点数学问题,这意味着当数字变得非常大或非常小时,它们会向上或向下舍入。当这些数字可以表示货币时并不理想,因为它们确实如此。
result.toNumber()
应该为您解决问题。
推荐阅读
- c - 如何在子进程中等待,直到父进程达到某个点?
- angular - 结合 *ngFor 插值访问全局变量
- visual-studio - VS Designer 中奇怪的用户控件拉伸问题
- arrays - Qradar AQL 中的多文本搜索
- c# - 如何在 C# + WCF 中使用凭据调用外部 API
- excel - 激活工作簿/工作表并复制到不同工作簿中的下一个空行
- spring - @ManyToOne 和 @LazyToOne 的 Fetch 类型用例
- javascript - PHP - 获取数据时的 Ajax 自动刷新页面
- java - Eclipse - 文件的 Java 本地历史记录
- mysql - 有没有办法将列中的 2 个值分成两个单独的列?