9

なぜecho 100000000000000;出力し、出力1.0E+14しないの100000000000000ですか?

出力でのこの種の整数の変換は、15桁以上の長さの整数に対してのみ発生します。

4

5 に答える 5

11

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

質問への答えは、PHPでのfloatの文字列表現に関連しています。

科学的記数法の指数が。より大きい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

浮動小数点と倍精度を参照してください

于 2013-03-15T16:31:03.553 に答える
6

その数は32ビット整数に収まらないほど大きいため、PHPはそれをfloatに格納しています。

PHPマニュアルの整数オーバーフローのセクションを参照してください。

本当に大きな整数が必要になる可能性が低い場合は、GMPを調べてください。

于 2013-03-15T16:25:17.670 に答える
3

PHPはそれほど大きな整数を処理できないため、それらを浮動小数点数として扱います。フロートは通常、有効数字の特定の数を超える不正確さを考慮して、科学的記数法で表されます。

于 2013-03-15T16:25:28.270 に答える
2

数値が大きすぎて、PHPがプラットフォームに整数として格納できないため、浮動小数点数として格納されます。文字列への変換の規則は、浮動小数点数と整数で異なります。

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

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

出力:

float(1.0E+14) 
not an integer
于 2013-03-15T16:31:34.840 に答える
0

PHPの組み込み整数サイズより大きい数値はすべて格納され、floatとして表されます。

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

于 2013-03-15T16:26:15.330 に答える