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

在PHP中如何处理大于16位的值?,php,Php,我正在使用SOAPclient调用一个方法,该方法(远程外部SOAPWeb服务)将返回一个19位数字。我无法控制返回的内容。当我打印这个数字的值时,只有前16位是准确的。 我尝试过类型转换、GMP等,但是当php根据web服务调用的结果将值分配给变量时,完整的19位数字似乎已经丢失了。因此,无法检索该值 $client = new SoapClient($sccSystemWSDL); try{ $sessionID = $client->logonUser($adminUser,

我正在使用SOAPclient调用一个方法,该方法(远程外部SOAPWeb服务)将返回一个19位数字。我无法控制返回的内容。当我打印这个数字的值时,只有前16位是准确的。 我尝试过类型转换、GMP等,但是当php根据web服务调用的结果将值分配给变量时,完整的19位数字似乎已经丢失了。因此,无法检索该值

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

在64位机器上,我没有这个问题。但是现在我必须在32位机器上运行它,到目前为止运气都不好。

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

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


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

+关于Precision指令,但也请注意,在处理浮点时,精度可能会对BCMath产生一些有趣的影响,请参阅