2013-03-15 14 views
6

echo 100000000000000;1.0E+14で、100000000000000でないのはなぜですか?出力で15桁以上の整数を変換する理由

この種類のの変換の出力は、15桁以上の整数の場合にのみ発生します。

+2

公平を期すためには、他の質問のタイトルは非常にうまく言葉で表現されていません。 – Jimbo

+0

'echo number_format(100000000000000,0、null、 '');' – Antony

+1

@PHPNooB OPは答えを提供するよりも多くの質問をするので、* rep *は質問しているので、彼はこれを彼のプロフィールとして知らないだろうと信じています彼がPHPの専門家であることを示すものではありません。また、ジンボが指摘したように、タイトルは本当にひどく言い表されている。あなたがバッジ売買のOPを非難する前に、プロファイルをクリックするようないくつかの研究をしてください。 –

答えて

10

PHPがPHP_INT_MAXより大きい場合、整数を浮動小数点に変換します。 32ビットシステムの場合、これは2147483647です。

質問に対する答えは、PHPでの浮動小数点数の文字列表現に関連しています。

scientific notationの指数が13より大きく、または-4より小さい場合、PHPは浮動小数点数を印刷するときに科学的表現を使用します。

例:

echo 0.0001; // 0.0001; 

echo 0.00001; // 1.0E-5 

// 14 digits 
echo 10000000000000; // 10000000000000 

// 15 digits 
echo 100000000000000; // 1.0E+14 

ので、それは浮動小数点数として格納され 、番号はご使用のプラットフォーム上でPHPで整数として格納するには大きすぎるfloat vs. double precision

6

この数値は大きすぎて32ビット整数に収まらないため、PHPが浮動小数点数で格納しています。

php manualの整数オーバーフローセクションを参照してください。

本当に大きな整数が必要な場合は、GMPを参照してください。

+0

32ビットに収まる最大の整数は何ですか? –

+0

最大整数32の値は2,147,483,647です(2.1E + 9) – UnholyRanger

+3

これが理由だった場合、PHP_INT_MAXより大きいすべての数値は科学的表記法で表されます。しかし、そうではありません。 –

3

PHPは大きな整数を扱うことができないため、浮動小数点数として扱います。浮動小数点数は、通常、ある数の有効桁数を超えた不正確さを考慮に入れて科学的表記法で表されます。

0

PHPの組み込み整数サイズより大きな任意の数が格納され、浮動小数点数として表されます。

出力時に特定の方法で数値をフォーマットするには、printfなどの関数を使用します。

2

を参照してください。 文字列への変換の規則は、浮動小数点数と整数で異なります。

次のことを試してみてください。

var_dump(100000000000000); 
echo(is_int(100000000000000) ? 'an integer' : 'not an integer'); 

出力:

float(1.0E+14) 
not an integer 
関連する問題