Smarty если заявления и большие цифры - PullRequest
0 голосов
/ 10 июня 2011

Этот код

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

выводит 'true1', но ни одно из утверждений не является истинным.

Есть ли у Smarty максимальный размер для сравнения целых чисел? Если так, то почему это выглядит немного «нечетко»?

Надеюсь, я только что сделал глупую ошибку.

Ответы [ 4 ]

3 голосов
/ 10 июня 2011

Это проблема с переполнением целочисленного типа в PHP. Он зависит от бита ОС (32/64).

Пожалуйста, смотрите:

Если PHP встречает число за пределами целочисленного типа, оно будет интерпретироваться как число с плавающей точкой. Кроме того, операция, результатом которой является число за пределами целочисленного типа, вместо этого вернет число с плавающей запятой.

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

0 голосов
/ 10 июня 2011

Вы должны написать плагин сравнения для smarty usin BCMath , поэтому большие числа будут обрабатываться правильно.

0 голосов
/ 10 июня 2011

Поскольку эти числа слишком велики для обычного типа int, Smarty будет (в соответствии с автоматическим преобразованием, которое делает PHP ) сравнивать их как float s, что приводит к потере точности.

0 голосов
/ 10 июня 2011

Я могу ошибаться, но ваше второе утверждение if всегда ложно ... так как эти цифры не совпадают ..

...