3

文字列変数でハードコードされた64ビット整数を使用しようとしています。

簡略化私はこのようなことをしたい:

$i = 76561197961384956;
$s = "i = $i";

その結果、次のsようになります。

i = 76561197961384956

PHPが大きな整数をfloatにキャストするため、これは明らかに機能しません。したがって、次のようになりsます。

i = 7.65611979614E+16

キャストなどの他のいくつかの方法は失敗しますが、私はそれを見つけnumber_format()て次のように使用します:

$s = "i = " . number_format($i, 0, '.', '');

しかし、これは次のsようになります。

i = 76561197961384960

近似問題のように見えますが、これを修正するにはどうすればよいですか?

4

4 に答える 4

3

文字列変換ではなく、割り当ての精度が失われます。この変数の値が実際にハードコーディングされていて、それを変更できない場合は、何もできません。

次のような行:

$i = 76561197961384956;

常に精度が失われます。すべてを保持する必要がある場合は、文字列に格納します。そのようなintとして格納し、すべての数字を保持することはできません。

于 2009-05-13T07:40:52.437 に答える
2

関数を使うのが唯一の方法だと思いbcmathます。

任意精度の数学のために、PHPは、文字列として表される任意のサイズと精度の数値をサポートする2進計算機を提供します。

文字列変換ではなく、それはあなた$iの間違いです-PHPは内部で32ビットintを使用します。

于 2009-05-13T07:34:02.760 に答える
2

今のところ、php で大きな整数の計算を行う唯一の方法は、大きな数を文字列として処理する bcmath または gmp 拡張機能を使用することです。64 ビット整数は php6 で計画されています。

そのため、大きな整数を使用して文字列にキャストするか、代入時に精度を失い ( float への自動キャスト)、文字列数学ライブラリを使用して数値をさらに処理します。

于 2009-05-13T08:14:09.763 に答える
-1

PHPのintval()関数を使用してみましたか?

于 2009-05-13T07:34:44.227 に答える