Javascript 是否可以使用web3.js从Solidity获取uint256值
所以问题很简单。我正在调用返回uint256值的contract方法。有可能在JavaScript中获得该值吗?据我所知,JavaScript无法处理大数字,解决方案是制定以字符串形式返回数据的新合同?现在我得到了一个值,它简单地削减了很多零:)Web3将原始数据类型(包括Javascript 是否可以使用web3.js从Solidity获取uint256值,javascript,solidity,web3js,Javascript,Solidity,Web3js,所以问题很简单。我正在调用返回uint256值的contract方法。有可能在JavaScript中获得该值吗?据我所知,JavaScript无法处理大数字,解决方案是制定以字符串形式返回数据的新合同?现在我得到了一个值,它简单地削减了很多零:)Web3将原始数据类型(包括uint)作为字符串返回。如果您尝试使用类似于parseInt的东西将其解析为javascript本机编号,则会失败 要处理通过web3接收到的大量数据,您必须使用能够处理这些数据的库。一个这样的库是BigNumber.JS
uint
)作为字符串返回。如果您尝试使用类似于parseInt
的东西将其解析为javascript本机编号,则会失败
要处理通过web3接收到的大量数据,您必须使用能够处理这些数据的库。一个这样的库是BigNumber.JS
所以你可以这样使用它:
let result = BigNumber(await bigNumber.methods.getNum1().call());
并使用BigNumber.js实现的数学运算
result = result.plus("99999999999999999999999999999999999999");
请注意,如果只是尝试使用结果值本身
console.log(result);
你会得到这样的结果
BigNumber {
s: 1,
e: 38,
c: [ 10000000213, 12312312312312, 45465777775431 ] }
因此,您可能希望最终将其转换为字符串
console.log(result.toString());
要以可读的形式获取结果,请执行以下操作:
1.00000002131231231231231245465777775431e+38
好吧,没关系。。。显然,您可以直接调用.toString();在结果中,您从ITA获得并解析所需的值,实际上BignumberJS已经在Web3JS中。所以,是的,我得到了这个有趣的数组作为结果,这在文档中并不明显,您可以简单地调用它的.toString()方法,以获取字符串形式的实际数字