10

期待される結果が次のようになるPHPコードを使用してきました。

1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000001
100000000000000001


最終的に出力は次のとおりです。

1
101
10001
1000001
100000001
10000000001
1000000000001 // (10 億)から(1000 億 - 1) はまだ実際の数を示しており、その後
1.0E+14
1.0E+16
1.0E+18


私はそこでいくつかの解決策を見つけました!彼らは、sprintfを使用するか、format_numberを試すことで言いました。両方試しました。 sprintf

と結果を使用:

$format_x = sprintf("%.0f ",$x);
echo $format_x.$br;

1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000000
100000000000000000


format_numberと結果を使用:

echo number_format($x, 0).$br;

1
101
10,001
1,000,001
100,000,001
10,000,000,001
1,000,000,000,001
100,000,000,000,001
10,000,000,000,000,000
1,000,000,000,000,000,000,000,000 1


しかし、実際の大きな数はまだ表示されていません。まあ、2つの方法は良さそうに見えますが、私が望むものには合いません. 誰でもこれを解決できますか?

4

2 に答える 2

9

標準の bc_mathライブラリを使用して、多数の演算を処理できます。この場合、数値は文字列として表されますが、ライブラリはそのような文字列での操作のための特定のメソッドを提供することに注意してください。

于 2013-08-20T06:30:21.627 に答える
3

必ず BCMath を使用する必要があります。

通常の数値ではできない理由を知りたい場合は、浮動小数点数であり、メモリ内の固定量のスペース (正確には 64 ビット) を使用しているため、精度が物理的に制限されているためです。それ以外の場合、テキストの長さが制限されているとばかげているため、文字列は制限されません。BcMath やその他のライブラリが算術計算に文字列を使用するのはそのためです。

大きな数値を格納するために PHP (およびほぼすべての言語) で使用される形式について詳しく知りたい場合は、http: //en.wikipedia.org/wiki/Double-precision_floating-point_formatを参照してください。

良い一日を過ごしてください

于 2013-08-20T06:53:55.413 に答える