【问题标题】:Is it possible to get uint256 value from Solidity using web3.js是否可以使用 web3.js 从 Solidity 获取 uint256 值
【发布时间】:2018-11-25 10:01:42
【问题描述】:

所以问题很简单。我正在调用返回 uint256 值的合约方法。是否有可能在 JavaScript 中获得该值?据我了解,JavaScript 不能处理大数字,解决方案是制定以字符串形式返回数据的新合同?现在我得到一个简单地去掉很多零的值:)

【问题讨论】:

  • 好吧,没关系...显然你可以调用 .toString();根据您获得的结果并从中解析所需的值

标签: javascript solidity web3js


【解决方案1】:

Web3 将原始数据类型(包括uint)作为字符串返回。如果您尝试将其解析为带有 parseInt 之类的 javascript 本机数字,它将失败。

要处理通过 web3 收到的大数字,您必须使用可以处理它们的库。一个这样的库是BigNumber.JShttps://github.com/MikeMcl/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

【讨论】:

  • 其实 BignumberJS 已经在 Web3JS 中了。所以是的,我得到了这个有趣的数组,这在文档中并不明显,你可以简单地调用 .toString() 方法来获取实际数字作为字符串
猜你喜欢
  • 2019-12-15
  • 2021-09-14
  • 2019-03-28
  • 1970-01-01
  • 2020-02-04
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多