我在下面的简单坚固性代码中编写了此代码以计算一些数字。但是,以太坊区块链在每个功能上提供不同的输出。我的代码有什么问题吗?还是以太坊区块链问题?
我的验证码:
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
答案 0 :(得分:4)
我认为问题是在done
情况下,编译器实际上并未发出代码来进行计算。而是在编译时进行计算,并在其中放置一个常量。
与运行时的EVM不同,确实支持编译器的十进制数学运算。例如。尽管EVM没有数字0.5的表示形式,您仍然可以写0.5 ether
。