2011-06-10 63 views
0

此代碼Smarty的if語句和大數

{if 10111060108552250999929 == 10111060108552250999924} 
true1 
{/if} 
{if 10111060108552250999929 == 20111060108552250999924} 
true2 
{/if} 

輸出 'true1' 但也不說法是正確的。

Smarty是否有比較整數的最大尺寸?如果是這樣,爲什麼它看起來有點「模糊」?

希望我犯了一個愚蠢的錯誤。

+2

http://php.net/manual/en/language.types.integer.php – 2011-06-10 12:00:38

+0

錯誤。然後,我將不得不將它們作爲字符串進行比較。助教。 – 2011-06-10 12:03:10

+0

沒有變化。它仍會產生相同的輸出。因爲,PHP會自動將它們轉換爲INT,請參閱http://codepad.org/jLTOBz6z – 2011-06-10 12:06:39

回答

3

這是與PHP的整數溢出問題。它根據OS位(32/64)而變化。

請參閱:

如果PHP遇到了一些超出了integer的範圍,將會被解釋爲float代替。此外,導致超出整數類型範圍的數字的操作將返回一個float。

http://www.php.net/manual/en/language.types.integer.php#language.types.integer.overflow

+0

你可不可以如果(浮動(1231112312312 ...)==浮動(1231231213 ...)) – 2011-06-10 12:58:47

-1

我可能是錯的,但你的第二個if語句總是假的......因爲這些數字是不一樣的..

+0

這兩個陳述都是錯誤的,但它將第一個陳述評估爲真。 – 2011-06-10 12:01:25

0

因爲這些數字都是用於經常int型過大,將Smarty的(按照automatic conversion PHP does)來比較它們作爲float S,從而導致的精度損失。

0

你應該考慮爲smarty usin BCMath寫一個比較插件,因此大數字將被正確處理。