【问题标题】:Strange behaviour of ethereum solidity calculation以太坊可靠性计算的奇怪行为
【发布时间】:2018-09-02 16:07:29
【问题描述】:

我在下面写了这个简单的solidity代码来计算一些数字。但是,以太坊区块链在每个功能上给出不同的输出。我的代码有什么问题还是以太坊区块链问题?

我的 Solidity 代码:

pragma solidity ^0.4.24;

contract Calculate {

    uint balance = 50000000000000000000;

    function done() public pure returns (uint) {
        return (50000000000000000000 / 3000) * 3000;
    }

    function fail() public view returns (uint) {
        return (balance / 3000) * 3000;
    }

}

输出:

done() function returns 50000000000000000000

fail() function returns 49999999999999998000

请在此处查看实时示例: https://ropsten.etherscan.io/address/0xf45a2a66be9835fdc9e1065875808616cb8e752e#readContract

【问题讨论】:

    标签: blockchain ethereum solidity calculation


    【解决方案1】:

    我认为问题在于在done 的情况下,编译器实际上并没有发出代码来进行计算。计算是在编译时完成的,并在其位置放置一个常量。

    编译器与运行时的 EVM 不同,确实支持十进制数学。例如。尽管 EVM 没有数字 0.5 的表示,但你可以写 0.5 ether

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 2019-10-17
      • 1970-01-01
      • 2013-09-08
      • 2020-08-05
      • 2016-02-28
      • 2022-06-27
      • 1970-01-01
      相关资源
      最近更新 更多