2012-10-09 71 views
1

我有這個代碼和問題是其開始從$2,147,483,647給輸出,其中,因爲我已經設置3000000000$3,000,000,000我在我的PHP代碼中丟失了什麼?

,我從我們在表單中設置有想出來的,但如果我們選擇高$2,147,483,647$2,147,483,647啓動

下面是現場演示:http://deewayz.in/demo/

這裏是我的代碼。

$v   = isset($_GET['v']) ? (int) $_GET['v'] : 3000000000; 

第一次給出正確的。但是當我們在形式上改變價值時,它會給出錯誤的結果。

例如檢查:提前http://deewayz.in/demo/index.php?v=3100000000&sv=5

謝謝:)

解決:

$v   = isset($_GET['v']) ? (float) $_GET['v'] : 3000000000; 

回答

3

您遇到一個integer overflow的情況,因爲PHP整數的最大值是2^31-1,計算結果爲2147483647.PHP通過將值限制到它們超出的邊界邊緣來處理整數溢出。

爲了解決這個問題,你可以使用一個float,它有一個更大的值範圍。有幾種方法可以將數字聲明爲浮點數,例如使用E符號或通過轉換,如下所示。

$v   = isset($_GET['v']) ? (float) $_GET['v'] : 3E9; 
+0

或者只是'(浮動)' – Peon

+0

我會用浮動謝謝,並檢查它是否可以工作 – deerox

+0

是的,它的工作非常感謝,非常感謝 – deerox

2

2147483647是整數限制。將數據類型更改爲bigintfloat

+0

有沒有辦法在這段代碼中解決這個問題? – deerox

+0

在php中是否還有'longint' /'bigint'? –

+0

int = 2,147,483,647 bigint => 9,223,372,036,854,775,807 – Peon

2

2,147,483,647是一個32位整數可以容納的最大值。 對於更大的數字,您可能需要使用BCMathGMP擴展名,或嘗試使用64位版本的PHP。使用float也可能是一種可能,因爲它可以存儲更長的數字(但是它們不會再精確)。

+0

即時通訊非常新的PHP,所以如果我可以修復這個代碼,只需更改代碼,這將幫助我感謝。 – deerox

+0

即時檢查您的帖子並找出答案。謝謝 – deerox

相關問題