爲什麼這個FALSE條件爲TRUE?爲什麼這個FALSE條件是TRUE?
<?php
if(111111111111111119 == 111111111111111118)
{
echo 'Condition is TRUE!';
}
?>
爲什麼這個FALSE條件爲TRUE?爲什麼這個FALSE條件是TRUE?
<?php
if(111111111111111119 == 111111111111111118)
{
echo 'Condition is TRUE!';
}
?>
引用自:
http://php.net/manual/en/language.operators.comparison.php
$ A == $ b爲TRUE,如果$ a等於$ b型雜耍
後,如果您比較了一些有一個字符串或比較涉及的數字字符串,然後將每個字符串轉換爲一個數字,並進行數值比較
因此,因爲你的字符串都是數字,他們首先被轉換爲數字。 然後,在某些體系結構中,數字非常大,並且溢出了最大整數大小,您將得到相同的結果。
PHP DOC
一個整數或浮點數轉換爲代表數字文本方式(包括指數部分爲浮子)的字符串。浮點數可以使用指數表示法(4.1E + 6)進行轉換。
如果浮子超出整數的邊界(通常爲+/- 2.15e + 9 = 2^31在32位的平臺和+/- 9.22e + 18 = 2^64在64位平臺上),結果是未定義的,因爲float沒有足夠的精度來給出精確的整數結果。沒有警告,即使發生這種情況,也不會發出通知!
我的猜測您使用的32位系統,以便因此
var_dump(111111111111111119,111111111111111118);
var_dump(111111111111111119 === 111111111111111118); // would be true on 32bit
輸出
float 1.1111111111111E+17
float 1.1111111111111E+17
true
簡單的解決方案
if(bcsub("111111111111111119", "111111111111111118") == "0")
{
// 32 bit true
var_dump("Am Free");
}
因爲它轉換成一個數字值
if('111111111111111119' == '111111111111111118')
{
echo 'Condition is TRUE!';
} else {
echo 'Condition is FALSE!';
}
// on 64 bit: condition is FALSE! (tested on my mac)
我假設在32位機器上它會是真的。即使當我刪除我的Mac上的報價它顯示錯誤。
if('a111111111111111119' == 'a111111111111111118')
{
echo 'Condition is TRUE!';
} else {
echo 'Condition is FALSE!';
}
// condition is FALSE!
未確認。可能是你的意思沒有引號? – 2013-02-24 17:43:05
您確定關於此問題:http://codepad.viper-7.com/TevroS – 2013-02-24 17:43:56
我可以重現它:http://codepad.org/sM1LT1nt。 – 2013-02-24 17:45:32