PHP浮点到int转换的不稳定行为
至少在我的机器上:PHP浮点到int转换的不稳定行为,php,Php,至少在我的机器上: $var = PHP_INT_MAX; var_dump($var); $var++; var_dump((int)$var); $var += 10; var_dump((int)$var); $var += 10000; var_dump((int)$var); 结果: int(9223372036854775807) int(-9223372036854775808) int(-9223372036854775808) int(-9223372036854765
$var = PHP_INT_MAX;
var_dump($var);
$var++;
var_dump((int)$var);
$var += 10;
var_dump((int)$var);
$var += 10000;
var_dump((int)$var);
结果:
int(9223372036854775807)
int(-9223372036854775808)
int(-9223372036854775808)
int(-9223372036854765568)
为什么这种行为如此疯狂?我可以理解每次使用PHP_MIN_INT时都会出现这种情况,但如果添加某些数字,它会发生变化吗
我在这里运行此代码时得到以下结果:
它是未定义的,因为float不适合整数。任何事情都有可能发生。它只是PHP,有它所有的怪癖。强制转换操作是使用C中的
(long)
强制转换操作实现的,在本例中未定义,因此您不应该依赖于任何特定的行为(事实上,在某些平台上,如MIPS64,这将导致CPU异常,从而停止PHP)
来源:已更新
关于最后两行我不知道,但是负结果很可能是由有符号整数表示和算术引起的。阅读更多关于它的信息
如果我们将+改为-代码工作正常。。。这意味着在最大值之后,甚至不可能加1,因为没有分配内存大小您将变量设置为最大可能值,然后向其添加一个变量,并期望它合理地运行?@皮特我希望它能做一些一致的事情。如溢出时重置为零
$var = PHP_INT_MAX;
var_dump($var);
$var--;
var_dump($var);
$var -= 10;
var_dump((int)$var);
$var -= 10000;
var_dump($var);