【发布时间】:2014-01-26 12:54:47
【问题描述】:
有人能解释一下最后两个案例的情况吗?
$x=PHP_INT_MAX;
var_dump($x); // int(9223372036854775807) no problem
var_dump($x+1); // float(9.2233720368548E+18) value is cast to float still no problem
var_dump($x+1-1); // float(9.2233720368548E+18) still okay
var_dump((int)($x+1-1)); // int(-9223372036854775808) negative value?!!
var_dump($x+1-$x); // float(0) zero?!!!!!!!!!!!
根据PHP manual:
- PHP_INT_MAX 是最大整数大小。
- 如果 PHP 遇到超出整数类型范围的数字,它将被解释为浮点数。此外,一个操作 结果超出整数类型范围的数字将返回 一个浮点数。
所以前 2 次转储没问题。第三次转储给出了预期的结果,但为什么最后两次转储给出的是负值和零?
【问题讨论】:
-
这与计算机存储数字的方式有关。特别是负数和浮点数。
标签: php math integer integer-overflow