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