以太坊实体计算的奇怪行为

问题描述 投票:1回答:1

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

我的坚固代码:

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个回答
4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.