此代码
{if 10111060108552250999929 == 10111060108552250999924}
true1
{/if}
{if 10111060108552250999929 == 20111060108552250999924}
true2
{/if}
输出'true1'但两种说法都不正确。
Smarty是否具有比较整数的最大大小?如果是这样,为什么它看起来有点“模糊”?
希望我犯了一个愚蠢的错误。
答案 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语句总是假的......因为这些数字不一样......