2009-05-13 13 views
3

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

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

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

sビーイングにつながるはずである:

i = 76561197961384956 

PHPがsがあるので、floatに大きな整数を唱えるように、これは明らかに動作しません。 :

i = 7.65611979614E+16 

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

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

しかし、これはsビーイングにつながる:

i = 76561197961384960 

が近似問題のように見えますが、どのようにこの問題を解決するために?

答えて

3

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

のような行:

$i = 76561197961384956; 

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

2

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

任意精度の数学では、PHPは任意のサイズと精度の数値をサポートするバイナリ電卓を提供しています。

あなたの$iは間違っていますが、文字列の変換ではありません - PHPは内部的に32ビットintを使用します。

-1

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

+1

これは間違っているためダウンしました。 Intvalは2147483647までの値またはPHP_INT_MAXが保持する値のみを処理します。 intとしてのキャストは、彼が避けようとしている問題を引き起こします。 – buggedcom

2

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

したがって、大きな整数を使用して文字列にキャストすると、割り当て時の精度が低下し、文字列数学ライブラリのonを使用してさらに数値を処理します。

関連する問題