2013-01-01 50 views
2

我想在數據庫中存儲整數值,對於那個使用(int)類型強制轉換的$ _POST值。但它評估的是另一個值,而不是提交的整數。PHP int類型轉換生成錯誤的值

echo (int)0444444; 

輸出

149796 

請幫助。

+0

'0444444'已經是一個整數,鑄造在這裏什麼都不做;您只需選擇以八進制(基數8)表示法進行編寫,而不是使用更常用的十進制(基數10)表示法。 – salathe

+1

請注意,您提到「*在$ _POST值*上使用(int)類型轉換」,但您的示例使用整數。除非您手動更改它們,否則'$ _POST'值總是*字符串*。 – salathe

+0

好點,我沒有注意到在例子..但實際上我得到奇怪的值在我的表單處理使用int typecasting $ _POST。 – TPSstar

回答

2

前導0的值被視爲八進制值。

+0

謝謝,那種類型轉換會起作用嗎?或者我需要使用is_int()? – TPSstar

+0

@TPSstar:只要刪除'0'。 –

+0

但仍然不是解決方案,我需要的東西,應該工作在任何情況下,即使與零:) – TPSstar

7

加上前綴0的整數意味着如果要一個字符串轉換爲整數,應當解釋爲八進制值,即,基座8的代替基座10

0444444 (OCT) = 149796 (DEC) 

,代替你可以使用intval(),它可以選擇允許你指定基數爲10.

在你的例子中,強制轉換是從int轉換爲int(0444444已被解釋爲一個整數),所以你的轉換是一個沒有操作。

+0

謝謝但回聲intval('03894563333',10);仍然評估另一個值... – TPSstar

+1

@TPSstar在32位PHP中,最大int值爲'2147483647' –

+0

@TPSstar由於您在32位平臺上運行,最大可能的int值爲2147483647('PHP_INT_MAX' 32位平臺),轉換在64位PHP上運行良好,並返回預期結果。如果您需要大於'PHP_INT_MAX'的數字,則需要使用另一個數據類型而不是整數。 –

3

根據其他答案,0前綴會導致PHP將值解釋爲Octal。

intval功能可能是你要找的。

+0

intval也評估它爲八進制:) – TPSstar

+1

你確定嗎? 'print intval('04444444');'='4444444'。你總是可以像這樣顯式聲明基10:'print intval('04444444',10);' –

+0

echo intval('03894563333',10);正在評估另一個價值。 – TPSstar