以太坊密度计算的奇怪行为

时间:2018-09-02 16:07:29

标签: blockchain ethereum solidity calculation

我在下面的简单坚固性代码中编写了此代码以计算一些数字。但是,以太坊区块链在每个功能上提供不同的输出。我的代码有什么问题吗?还是以太坊区块链问题?

我的验证码:

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

请在此处签出实时示例: RFC 8259

1 个答案:

答案 0 :(得分:4)

我认为问题是在done情况下,编译器实际上并未发出代码来进行计算。而是在编译时进行计算,并在其中放置一个常量。

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