为什么方法返回数组而不是数字或字符串?

时间:2019-02-12 11:00:15

标签: solidity web3 web3js metamask

我试图通过Metamask中的web3从Solidity Contract中获取数据。 我不明白为什么我得到数组而不是数字或字符串? 也许您知道从以太坊合约中获取正常数据的其他方法吗? 考虑我的代码:

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);
            }

        });

我得到了回应: 对于名称:enter image description here

对于小数:enter image description here

1 个答案:

答案 0 :(得分:0)

是BigNumber表示法。

Solidity使用大量数字来提高精度。 JavaScript数字具有浮点数学问题,这意味着当数字很大或很小时,它们会四舍五入。当这些数字可以表示货币时,就像在扎实的记录中那样,它并不理想。

result.toNumber()应该为您解决问题。