为什么PHP在输出上转换15+位长整数

时间:2013-03-15 16:23:27

标签: php integer

为什么echo 100000000000000;输出1.0E+14而不是100000000000000

这种输出整数的转换只发生在15位长和更长的整数上。

5 个答案:

答案 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

请参阅float vs. double precision

答案 1 :(得分:6)

这个数字太大而不适合32位整数,所以PHP将它存储在浮点数中。

请参阅php manual中的整数溢出部分。

如果您需要非常大的整数,请查看GMP

答案 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

等函数