Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP浮点到int转换的不稳定行为_Php - Fatal编程技术网

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);