2013-05-13 66 views
0

我檢查是否值IR 0之間和-0.2像這樣:爲什麼這個數字被檢測爲bool?

float value = -0.1; 
if (0 <value> -0.2f) { } 

,但我得到的錯誤operator '>' cannot be applied to operands of type 'bool' and 'float'。我知道,我可以通過其他方式使用&&運算符來判斷,但是我想知道,爲什麼會被檢測爲bool?

回答

7

看看這個:

0 <value> -0.2f 

首先0 < value評估,它返回bool值,那麼它會嘗試把它比bool浮數-0.2f,所以它會返回錯誤,因爲這是不允許的。

你要檢查是否值小,如果值是大於,所以這是你想做的事:

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

這是因爲你的if語句的構造。試試這個:

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

你寫的是相同的:

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

0 < value比較被評估,返回一個布爾值,然後成爲第二個比較操作數。並且,如錯誤消息所示,您不能使用>來比較布爾值和浮點數。

4
float value = -0.1; 
if (0 <value> -0.2f) { } 

因爲你需要單獨的比較

最語言從左到右工作

0 < value 

將首先被評估。這是一個布爾

現在你表達的結果全文

boolean > -0.2f 

這顯然是行不通的。您需要

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

& &是一個「邏輯和」其邏輯計算的結果相結合,左右它

+0

沒有人似乎已經注意到,如果'0 <值',那麼'值> 0'(除非值是NaN),因此'值> -0.2f',所以OP有一個不必要的測試或意味着要測試範圍'((0.0f>值)&&(值> -0.2f))' – 2013-05-13 15:32:10

+0

lol好點皮特......也許應該是0>值,正如你所說 – 2013-05-13 15:33:37

0

由於順序操作的。

基本上,編譯器編譯,如果以這樣的事:

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

和被比較一個boolint,這是不好的結果。

試試這個:

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

你的if語句語法不正確。它需要大括號之間的布爾表達式。

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

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

你的語句解析如下:

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

(0 < value)計算結果爲布爾表達式。你正試圖將它與浮點數進行比較。因此錯誤。

正如你自己建議的那樣,正常的做法是使用&&