2014-01-23 61 views
0

在php.net寫入以下:比較型串的數值

如果你比較多個具有一個字符串或比較涉及數字串,則每一個字符串被轉換爲數字和比較數值進行。這些規則也適用於switch語句。當比較結果爲===!==類型轉換不會發生,因爲這涉及比較的類型以及該值

  1. var_dump("10" == "1e1"); // 10 == 10 -> true
  2. var_dump(100 == "1e2"); // 100 == 100 -> true

爲什麼在第一個例子中它被評估爲true,但是,語句$ num =(int)「1e1」;評估爲1而不是10此外,爲什麼在第二個例子中它被評估爲true,但是語句$ num =(int)「1e2」;評估爲1而不是100?

+0

http://stackoverflow.com/questions/11489549/ php-string-comparison-using – Krzysztek

回答

1

我不知道爲什麼(int)'1E1'顯示1(它可能忽略所有字母和之後的任何東西),但什麼完美的作品對我來說是這樣的:

echo '1E1'*1; //returns 10 
+0

如果你會運行腳本,你會看到輸出就像我在說什麼,我試過1E1,仍然轉向1.我的問題是爲什麼比較數字字符串時,然後它1E1轉換爲10,當我嘗試通過轉換爲int它轉換爲1? – user3021621

+0

我更新了答案,我相信我明白你現在要問什麼。 – Anonymous

0
  1. 字符串和字符串比較:「10」與「1e1」相同的字符串表示。
  2. Int和字符串比較:100作爲字符串是「100」或「1e2」並且與「1e2」具有相同的表示形式;
  3. 將字符串強制轉換爲int:(int)「1e1」=> 1作爲intval(「1e1」)。

鑄造與平等不一樣。

0

1e1是

var_dump("10" == "1e1"); 
// 10 (converts to real type, not int) == 10 (converts to real type, not int) -> true 

我試圖數字串轉換(浮點型)爲整數:

(int)'1E1' 

原來的1,而不是100。

+0

這不是真正解決問題的原因 – fejese

+0

要理解爲什麼,您需要查看源代碼。否則 - 只是接受爲事實:它是在轉換爲整數期間解析字符串的一種功能(e - 是文字字符,它被丟棄)。 –