簡體   English   中英

PHP浮動為int轉換不穩定行為

[英]PHP float to int cast erratic behavior

至少在我的機器上:

$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,但是如果您添加某些數字,它會改變嗎?

我在這里運行此代碼時得到以下結果:

http://writecodeonline.com/php/

它是未定義的,因為float不適合整數。 什么都可能發生。 它只是PHP,具有所有怪癖。 強制轉換操作是使用C中的(long)強制轉換操作實現的,在這種情況下,此操作是未定義的,因此您不應該依賴任何特定的行為(實際上,在某些平台上,例如MIPS64,這會導致CPU異常,這會導致將停止PHP)。

資料來源: http : //www.php.net/manual/en/language.types.integer.php#language.types.integer.casting.from-float

更新

關於最后兩行,我無法分辨,但是負結果很可能是由帶符號的整數表示形式和算術引起的。 在此處了解更多信息。

$var = PHP_INT_MAX;
var_dump($var);
$var--;
var_dump($var);
$var -= 10;
var_dump((int)$var);
$var -= 10000;
var_dump($var);

如果我們將+更改為-代碼可以正常工作... ...這意味着在最大值之后無法加上甚至1,因為未分配內存大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM