[英]Strange behaviour of 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
请在此处签出实时示例: https : //ropsten.etherscan.io/address/0xf45a2a66be9835fdc9e1065875808616cb8e752e#readContract
我认为问题在于,在done
情况下,编译器实际上不会发出代码来进行计算。 而是在编译时进行计算,并在其位置放置一个常量。
与运行时的EVM不同,编译器确实支持十进制数学。 例如,尽管EVM没有数字0.5的表示,但您仍可以写0.5 ether
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.