我正在检查0和-0.2之间的值是否如此:
float value = -0.1;
if (0 < value > -0.2f) { }
但我收到错误operator '>' cannot be applied to operands of type 'bool' and 'float'
。我知道,我可以通过其他方式使用&&
运算符来判断句子,但我想知道,为什么它会被检测为bool?
答案 0 :(得分:7)
看看这个:
0 < value > -0.2f
首先评估0 < value
,它返回bool
值然后尝试将bool
与浮点数-0.2f
进行比较,因此它返回错误,因为它是不允许的。
您想要检查值是否更小以及值是否大于,所以这就是您想要做的:
if (0 < value && value > -0.2f) { }
答案 1 :(得分:4)
float value = -0.1;
if (0 < value > -0.2f) { }
因为你需要分开比较
大多数语言从左到右工作
0 < value
将首先进行评估。这个布尔值
的结果现在你的表达式为
boolean > -0.2f
这显然不起作用。你需要
if (0 < value && value > -0.2f)
&安培;&安培;是一个'逻辑和',它将逻辑计算的结果组合到它的左右两边
答案 2 :(得分:1)
这是因为if语句的构造。试试这个:
if (0 < value && value > -0.2f) { }
你所写的内容相当于:
if ((0 < value) > -0.2f) { }
正在评估0 < value
比较,返回一个布尔值,然后成为第二次比较的操作数。并且,正如错误消息所示,您不能使用>
来比较布尔值和浮点数。
答案 3 :(得分:0)
由于操作顺序。
基本上,编译器将if编译成这样的东西:
if ((0 < value) > -0.2f)
结果是比较bool
和int
,这是不好的。
请改为尝试:
if (0 < value && value > 0.2f)
答案 4 :(得分:0)
你的if语句在语法上是不正确的。它需要在大括号之间使用布尔表达式。
http://msdn.microsoft.com/en-us/library/vstudio/5011f09h.aspx
if (0 < value > -0.2f) { }
您的语句解析如下:
if ((0 < value) > -0.2f) { }
(0 < value)
计算布尔表达式。你试图将它与浮点数进行比较。因此错误。
正如您自己建议的那样,正常的方法是使用&&
。