如何处理PHP中大于16位的值?

时间:2013-02-04 09:20:15

标签: php

我正在使用SOAPclient调用方法,并且该方法(远程外部SOAP Web服务)返回一个19位数字。我无法控制返回的内容。当我打印此数字的值时,只有前16位数字是准确的。 我已经尝试了类型转换,GMP等。但是当php根据Web服务调用的结果将值赋给变量时,看起来已经丢失了完整的19位数字。所以无法检索该值。

$client = new SoapClient($sccSystemWSDL);
try{
    $sessionID = $client->logonUser($adminUser,$passWord);
}

在64位机器上我没有这个问题。但现在我必须在32位机器上运行它,直到现在都没有运气。

2 个答案:

答案 0 :(得分:5)

使用BCMath它允许将数字作为字符串而不是整数处理,因此没有大小限制。此外,您应该将precision指令增加到更大的数字,比如20左右。

答案 1 :(得分:1)

Cryptic使用BCMath的答案很好。或者,您可以使用phpseclib的BigInteger类,它是BCMath GMP的包装器,并且还具有自定义PHP回退。

您遇到的问题是因为PHP没有内置支持超过其运行的系统的最大整数值的整数。相反,它仅限于操作系统支持的内容。对于32位系统,这意味着最大整数值为2 ^ 31,而在64位系统上,此值为2 ^ 63(保存一位以对值进行签名,例如指示它是正还是负)。