整数分数形式的uint乘法

时间:2019-02-24 21:46:59

标签: solidity

我正在尝试为稳固性值设定上下限。

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中有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

正如documentions所说的 Solidity 尚不完全支持十进制运算。您在那里有两个选择。

  1. 您可以将.51.5转换为multiplicationdivision操作。但是由于输出是单位,您将损失精度。 例如:

    uint value = 5;
    uint lower_threshold = value / 2;//output 2
    uint upper_threshold = value * 3 / 2;//output 7
    
  2. 您可以将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
    }