PHP intval在大十进制时失去准确性

时间:2014-09-18 10:20:58

标签: php integer-overflow

echo intval(hexdec('c0199506cb5dd57f')); // -4604485287595354112

当我们在客户端做同样的事情时还有另一个:

client on objective-c returns -4604485287595354753
client wrote on java returns  -4604485287595354753

我认为这是因为整数变得溢出(PHP不支持有符号整数)和结果丢失准确性。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

“最大值取决于系统.32位系统的最大有符号整数范围为-2147483648到2147483647.因此,例如在这样的系统上,intval('1000000000000')将返回2147483647.最大有符号整数值对于64位系统是9223372036854775807。“

来自:http://php.net/manual/en/function.intval.php

一些解决方法是将值存储在字符串中,或​​将其拆分为多个可以重新组合在一起的部分。或者,有外部插件用于处理非常大的数字。

哪种解决方案最好取决于使用的数字。