なぜecho 100000000000000;
出力し、出力1.0E+14
しないの100000000000000
ですか?
出力でのこの種の整数の変換は、15桁以上の長さの整数に対してのみ発生します。
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
浮動小数点と倍精度を参照してください
PHPはそれほど大きな整数を処理できないため、それらを浮動小数点数として扱います。フロートは通常、有効数字の特定の数を超える不正確さを考慮して、科学的記数法で表されます。
数値が大きすぎて、PHPがプラットフォームに整数として格納できないため、浮動小数点数として格納されます。文字列への変換の規則は、浮動小数点数と整数で異なります。
次のことを試してください。
var_dump(100000000000000);
echo(is_int(100000000000000) ? 'an integer' : 'not an integer');
出力:
float(1.0E+14)
not an integer
PHPの組み込み整数サイズより大きい数値はすべて格納され、floatとして表されます。
出力で特定の方法で数値をフォーマットするには、などの関数を使用しますprintf
。