为什么echo 100000000000000;
输出1.0E+14
而不是100000000000000
?
这种输出整数的转换只发生在 15 位或更长的整数上。
如果整数大于 PHP_INT_MAX,PHP 会将整数转换为浮点数。对于 32 位系统,这是 2147483647。
问题的答案与 PHP 中浮点数的字符串表示有关。
如果科学计数法中的指数大于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 内置整数大小的数字都被存储并表示为浮点数。
要在输出中以特定方式格式化数字,请使用诸如printf
.