我了解整数大小,PHP_INT_MAX
取决于平台。
在 64 位系统上,我可以得到:
$large_number = 9223372036854775807
Run Code Online (Sandbox Code Playgroud)
从我从此处的 PHP 文档示例 3 中读取的内容来看,当整数溢出时,PHP 将整数处理为浮点数,精度约为 14 位小数,即:
Unsigned Int64: 18446744073709551615
PHP will handles as: 1.844674407371E+19
Run Code Online (Sandbox Code Playgroud)
所以似乎所有的精度都只保持在 Signed Int64 的最大值。
这真的只是 PHP 的一个限制而我对此无能为力吗?
是的,这是 PHP 的限制,除了重新编译 PHP 解释器之外,您无能为力。即使如此,您仍会受到本机系统支持的类型的限制,这些类型通常不会大于 64 位。如您所知,您可以使用GMP或BCMath,但这不是您的要求。
在底层,根据您的系统,PHP 整数和PHP 浮点类型对应于带符号的 C 整数类型和 C 浮点类型(据我所知,PHP 总是使用 C 双精度数作为“浮点”)。这是静态关系,编译后无法更改。由于 C 类型具有固定精度,当然 PHP 类型也具有固定精度。
“溢出”到浮点数只是一种方便的妥协,这样你就可以存储非常大的数字,而不是根本不存储。是的,您失去了一些精度,但仅限于有效数。PHP 不会自动将数字转换为其他更高精度的浮点格式,因为它没有这种格式。