2013-02-04 10 views
5

私はSOAPClientを使用してメソッドを呼び出しています。メソッド(リモートの外部SOAP Webサービス)が私に19桁の数字を返しています。返されていることを私は支配しません。この番号の値を印刷すると、最初の16桁だけが正確です。 私はタイプキャスト、GMPなどを試してみました。しかし、PHPがWebサービス呼び出しの結果に基づいて変数に値を割り当てると、完全な19桁の数字が既に失われているように見えます。したがって、値を取得する方法はありません。PHPで16桁を超える値を扱う方法は?

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

私はこの問題を抱えていませんでした。しかし今は32ビットマシンでこれを実行しなければなりません。

答えて

5

BCMathを使用すると、数値は整数ではなく文字列として処理されるため、サイズ制限はありません。また、precisionディレクティブを20などと大きな数値に増やす必要があります。

+1

+ Precisionディレクティブだけでなく、精度は浮動小数点を扱うときにBCMathに面白い効果があることにも注意してください。http://stackoverflow.com/a/14656315/1226894 – Baba

1

BCMathを使用したクリプティックの答えは良いです。代わりに、BCMath GMPのラッパーであるphpseclibのBigIntegerクラスを使用して、カスタムPHPフォールバックを使用することもできます。

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

関連する問題