为什么echo 100000000000000;
输出1.0E+14
而不是100000000000000
?
这种输出整数的转换只发生在15位长和更长的整数上。
答案 0 :(得分:11)
如果整数大于PHP_INT_MAX,PHP会将整数转换为float。对于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
答案 1 :(得分:6)
答案 2 :(得分:3)
PHP无法处理那么大的整数,因此将它们视为浮点数。浮点数通常用科学记数法表示,以考虑超过一定数量有效数字的不准确性。
答案 3 :(得分:2)
该数字太大,无法在您的平台上通过PHP存储为整数, 所以它存储为浮点数。 对于float-number和integer,转换为string的规则是不同的。
尝试以下方法:
var_dump(100000000000000);
echo(is_int(100000000000000) ? 'an integer' : 'not an integer');
输出:
float(1.0E+14)
not an integer
答案 4 :(得分:0)
任何大于PHP的内置整数大小的数字都会被存储并表示为float。
要在输出中以特定方式格式化数字,请使用printf
。