PHP intval 以大小数失去准确性


PHP intval lose accuracy with big decimal

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

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

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

我认为这是因为整数溢出(PHP 不支持有符号整数(并且结果损失准确性。

如何解决这个问题?

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

寄件人: http://php.net/manual/en/function.intval.php

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

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