Smarty if语句和大数字

时间:2011-06-10 11:57:31

标签: php if-statement smarty

此代码

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

输出'true1'但两种说法都不正确。

Smarty是否具有比较整数的最大大小?如果是这样,为什么它看起来有点“模糊”?

希望我犯了一个愚蠢的错误。

4 个答案:

答案 0 :(得分:3)

这是PHP的整数类型溢出的问题。它根据OS位(32/64)而变化。

请参阅:

  

如果PHP遇到超出整数类型边界的数字,则会将其解释为float。此外,导致超出整数类型边界的数字的操作将返回浮点数。

     

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

答案 1 :(得分:0)

由于这些数字对于常规int类型来说太大,Smarty会(根据automatic conversion PHP does)将它们比作float s,导致精度损失。

答案 2 :(得分:0)

你应该考虑使用BCMath为smarty编写一个比较插件,因此可以正确处理大数字。

答案 3 :(得分:-1)

我可能错了,但你的第二个if语句总是假的......因为这些数字不一样......