为什么这个数字被检测为bool
本文关键字:检测 bool 数字 为什么 | 更新日期: 2023-09-27 18:13:15
我正在检查值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
值,然后尝试将bool
与浮点数-0.2f
进行比较,因此返回错误,因为这是不允许的。
您想要检查值是否小于和是否大于,所以这就是您想要做的:
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编译成这样:
if ((0 < value) > -0.2f)
并对bool
和int
进行了比较,结果并不理想。
试试这个:
if (0 < value && value > 0.2f)
您的if语句在语法上不正确。它需要大括号之间的布尔表达式。
http://msdn.microsoft.com/en-us/library/vstudio/5011f09h.aspx
if (0 < value > -0.2f) { }
您的语句解析如下:
if ((0 < value) > -0.2f) { }
(0 < value)
计算为布尔表达式。您正试图将其与浮点运算进行比较。因此出现了错误。
正如您自己所建议的那样,正常的方法是使用&&
。