我正在尝试为稳固性值设定上下限。
function foo(uint value) public {
uint lower_threshold = value * 0.5;
uint upper_threshold = value * 1.5;
}
使用上面的代码,我得到以下错误:
TypeError: Operator * not compatible with types uint32 and rational_const 1 / 2
我的目标是检查传递的值是否在阈值内以执行某些操作。在Solidity中有没有办法做到这一点?
答案 0 :(得分:1)
正如documentions所说的 Solidity 尚不完全支持十进制运算。您在那里有两个选择。
您可以将.5
和1.5
转换为multiplication
和division
操作。但是由于输出是单位,您将损失精度。 例如:
uint value = 5;
uint lower_threshold = value / 2;//output 2
uint upper_threshold = value * 3 / 2;//output 7
您可以将value
与一些uint value
相乘,以便执行
value / 2
不会有任何精度损失。 例如:
uint value = 5;
uint tempValue = value * 10;//output 50
uint lower_threshold = tempValue / 2;//output 25
uint upper_threshold = tempValue * 3 / 2;//output 75
if(tempValue >= lower_threshold && tempValue <= lower_threshold) {
//do some stuff
}