0

我正在检查值 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?

4

5 回答 5

7

看看这个:

0 < value > -0.2f

首先0 < value被评估,它返回boolvalue 然后它尝试bool与 float number比较-0.2f,所以它返回错误,因为它是不允许的。

您想检查 value 是否小于以及 value 是否大于,所以这就是您想要做的:

if (0 < value && value > -0.2f) { }
于 2013-05-13T15:25:43.040 回答
4
float value = -0.1;
if (0 < value > -0.2f) { }

因为你需要分开比较

大多数语言从左到右工作,所以

0 < value 

将首先进行评估。这是一个布尔值的结果

现在您的表达式为

boolean > -0.2f

这显然行不通。你需要

if (0 < value && value > -0.2f)

&& 是一个“逻辑与”,它将逻辑计算的结果组合到它的左侧和右侧

于 2013-05-13T15:26:03.187 回答
1

这是因为您的 if 语句的构造。试试这个:

if (0 < value && value > -0.2f) { }

你写的相当于这个:

if ((0 < value) > -0.2f) { }

0 < value正在评估比较,返回一个布尔值,然后它成为第二次比较的操作数。而且,正如错误消息所说,您不能>用来比较布尔值和浮点数。

于 2013-05-13T15:25:32.553 回答
0

您的 if 语句在语法上不正确。它需要大括号之间的布尔表达式。

http://msdn.microsoft.com/en-us/library/vstudio/5011f09h.aspx

if (0 < value > -0.2f) { }

您的语句解析如下:

if ((0 < value) > -0.2f) { }

(0 < value)计算为布尔表达式。您正试图将其与浮点数进行比较。因此错误。

正如您自己建议的那样,执行此操作的正常方法是使用&&.

于 2013-05-13T15:29:28.583 回答
0

因为操作顺序

基本上,编译器将 if 编译为如下内容:

if ((0 < value) > -0.2f)

结果是比较 abool和 an int,这是不好的。

试试这个:

if (0 < value && value > 0.2f)
于 2013-05-13T15:26:24.047 回答