9

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

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

4

5 回答 5

11

如果整数大于 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

请参阅浮点与双精度

于 2013-03-15T16:31:03.553 回答
6

该数字太大而无法放入 32 位整数,因此 PHP 将其存储在浮点数中。

请参阅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 内置整数大小的数字都被存储并表示为浮点数。

要在输出中以特定方式格式化数字,请使用诸如printf.

于 2013-03-15T16:26:15.330 回答