作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在下面编写了这个简单的 solidity 代码来计算一些数字。但是,以太坊区 block 链在每个函数上给出了不同的输出。我的代码有什么问题还是以太坊区 block 链问题?
我的 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
最佳答案
我认为问题是在 done
情况下,编译器实际上并没有发出代码来进行计算。计算在编译时完成,并在其位置放置一个常量。
与运行时的 EVM 不同,编译器确实支持十进制数学。例如。你可以写 0.5 ether
尽管 EVM 没有数字 0.5 的表示。
关于blockchain - 以太坊坚固性计算的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138753/
我是一名优秀的程序员,十分优秀!