5

SOAPclient を使用してメソッドを呼び出していますが、そのメソッド (リモートの外部 SOAP Web サービス) から 19 桁の数字が返されます。返されるものを制御することはできません。この数値の値を印刷すると、最初の 16 桁のみが正確です。型キャスト、GMP などを試しましたが、Web サービス呼び出しの結果に基づいて php が変数に値を割り当てると、完全な 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

BCMathを使用するというCrypticの答えは良いです。または、 BCMathGMP のラッパーであり、カスタム PHP フォールバックを備えたphpseclib のBigIntegerクラスを使用することもできます。

PHP が動作するシステムの最大整数値を超える整数をビルトインでサポートしていないため、発生している問題が存在します。代わりに、オペレーティング システムがサポートするものに制限されます。32 ビット システムの場合、これは最大整数値が 2^31 であり、64 ビット システムの場合、この値が 2^63 であることを意味します (値に署名するために 1 ビットを保存します。たとえば、正か負かを示します)。

于 2013-02-04T11:50:04.053 に答える