{if 10111060108552250999929 == 10111060108552250999924}
true1
{/if}
{if 10111060108552250999929 == 20111060108552250999924}
true2
{/if}
輸出 'true1' 但也不說法是正確的。
Smarty是否有比較整數的最大尺寸?如果是這樣,爲什麼它看起來有點「模糊」?
希望我犯了一個愚蠢的錯誤。
{if 10111060108552250999929 == 10111060108552250999924}
true1
{/if}
{if 10111060108552250999929 == 20111060108552250999924}
true2
{/if}
輸出 'true1' 但也不說法是正確的。
Smarty是否有比較整數的最大尺寸?如果是這樣,爲什麼它看起來有點「模糊」?
希望我犯了一個愚蠢的錯誤。
這是與PHP的整數溢出問題。它根據OS位(32/64)而變化。
請參閱:
如果PHP遇到了一些超出了integer的範圍,將會被解釋爲float代替。此外,導致超出整數類型範圍的數字的操作將返回一個float。
http://www.php.net/manual/en/language.types.integer.php#language.types.integer.overflow
你可不可以如果(浮動(1231112312312 ...)==浮動(1231231213 ...)) – 2011-06-10 12:58:47
我可能是錯的,但你的第二個if語句總是假的......因爲這些數字是不一樣的..
這兩個陳述都是錯誤的,但它將第一個陳述評估爲真。 – 2011-06-10 12:01:25
因爲這些數字都是用於經常int
型過大,將Smarty的(按照automatic conversion PHP does)來比較它們作爲float
S,從而導致的精度損失。
你應該考慮爲smarty usin BCMath寫一個比較插件,因此大數字將被正確處理。
http://php.net/manual/en/language.types.integer.php – 2011-06-10 12:00:38
錯誤。然後,我將不得不將它們作爲字符串進行比較。助教。 – 2011-06-10 12:03:10
沒有變化。它仍會產生相同的輸出。因爲,PHP會自動將它們轉換爲INT,請參閱http://codepad.org/jLTOBz6z – 2011-06-10 12:06:39