質問

私は、文字列変数にハードコードされた64ビット整数を使用しようとしている。

Simplfiedが、私はこのような何かをしたい:

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

どのsのビーイングにつながる必要があります:

i = 76561197961384956

これは明らかにPHPが浮かぶように大きな整数をキャストとして、そのためsは動作しません。

i = 7.65611979614E+16

などのキャスティングのような他のいくつかの方法が失敗している間、私はnumber_format()を発見し、このようにそれを使用します

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

しかし、これはsのビーイングになります:

i = 76561197961384960

近似問題のように見えますが、これを修正する方法?

役に立ちましたか?

解決

あなたはいない文字列変換に、割り当てに精度を失っています。この変数の値が実際にハードコードされて、そしてあなたがそれを変更できない場合は、あなたができることは何もありません。

のような行:

$i = 76561197961384956;

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

他のヒント

私は唯一の方法は bcmath の機能を使用することだと思いますます。

  

は、任意精度数学についてPHPは文字列として表された任意の大きさと精度の数をサポートするバイナリ計算機を提供しています。

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

今のPHPで大規模な整数演算を行うための唯一の方法は、文字列として大量に扱うbcmathまたはGMP拡張機能を使用することです。 64ビットの整数はPHP6に予定されています。

それほど大きな整数を使用している場合は、文字列にそれらをキャストするか、割り当てに(floatへの自動キャスト)の精度を失い、その後、さらにあなたの数を処理するために、文字列の数学ライブラリのに使用されます。

あなたはPHPのINTVAL()関数を使用してみましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top