5

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

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

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

4

2 回答 2

5

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

于 2013-02-04T09:23:15.263 回答
1

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

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

于 2013-02-04T11:50:04.053 回答