2010-05-12 58 views
1
$this->totplpremium is 2400 
$this->minpremiumq is 800 

那麼,爲什麼這將永遠返回真實?!基本的PHP邏輯問題

if ($this->totplpremium < $this->minpremiumq){ 

這些數字是絕對正確的,我絕對使用「小於」符號。我無法解決這個問題。

+2

你能展示一個完整的工作代碼示例嗎? – 2010-05-12 09:17:06

+1

嘗試添加調試輸出(即使只是一組簡單的回波線),以確保兩個變量是2400和800,如果它們是,我會看看你的大括號,看看是否有任何不合適的地方。 – Sukasa 2010-05-12 09:17:26

+0

我猜的值有錯誤。使用'var_dump($ this)'併發布輸出。 – ZeissS 2010-05-12 09:17:51

回答

3

也許存在某種轉換問題。嘗試使用

var_dump($this->totplpremium); 
var_dump($this->minpremiumq); 
if ($this->totplpremium < $this->minpremiumq){ 
    ... 
} 

,看看數據類型都還好吧

編輯:有一些工具,使您可以更輕鬆地調試你的代碼比使用調試輸出 - http://xdebug.org/(一個擴展庫,使您的調試)和http://en.wikipedia.org/wiki/PHPEd(。這是商業,我不知道是否有替代)

+2

可能是帶有空格的字符串。 '2400> 800',''2400「>」800「',但是'」2400「<」800「' - 由於空格,它們不會被打成int型,而按字典順序2400則更小。 – Tgr 2010-05-12 09:24:45

+1

2400 *當比較字符串時,IS *小於800。 – 2010-05-12 09:27:15

+0

@Salman A:並非如此。從[documentation](http://www.php.net/manual/en/language.operators.comparison.php):*如果您將數字與字符串進行比較或者比較涉及數字字符串,則將每個字符串轉換* – Tgr 2010-05-12 09:38:06

0

作爲一個字母的比較,下面的說法是正確的:

"800" > "2400" 

(因爲8大於2)

+0

這實際上是假的。在進行比較之前,PHP type-juggles將包含純數字的字符串轉換爲數字。 – Tgr 2010-05-12 09:49:48

2

嘗試用INTVAL包裝的「數字」:

if (intval($this->totplpremium) < intval($this->minpremiumq)){ 
//... 
} 

如果按預期工作,那麼你真的需要使用的GetType檢查什麼類型totplpremium和minpremiumq是,例如:

print(gettype($this->totplpremium)); 
print(gettype($this->minpremiumq)); 

有了這些信息,您應該能夠查明您的錯誤。

0
<?php 

$totplpremium="2400 "; 
$minpremiumq="800"; 

var_dump(($totplpremium < $minpremiumq)?true:false); 
var_dump(((int)$totplpremium < (int)$minpremiumq)?true:false); 

?> 

我想你應該仔細檢查這些值來自哪裏或確保它們是整數。

祝你好運!

+0

是的,2400之後的空間是爲了一個目的:強迫它們被比作絃樂! – Henrik 2010-05-12 10:09:08