2009-10-14 58 views
1

我有時遇到一個複雜的腳本有問題(大約需要2或3次約90,000個值),生成'-0'並將其寫入數據庫。我懷疑它是一個字符串(所計算的值可能導致整數,浮點數或字符串。)*有沒有可能導致-0的PHP計算?

是否有可能導致'-0'的任何PHP計算?

* =哦,我是多麼想念有時強類型...

+0

哇,我希望不會! – gn22 2009-10-14 06:53:04

+0

另外,DB是否是所有變種? – gn22 2009-10-14 06:53:47

+0

結果數字是否舍入? – Luke 2009-10-14 06:59:41

回答

5

將一個負數舍入到正無窮大,如ceil()所做的那樣,可以產生-0。

echo ceil(-.7); 

// -0 

結果相同,例如round(-.2)

這兩個將解析爲真:

(-0 == 0) 
(ceil(-.7) == 0) 

雖然這些將解析真假,分別是:

(-0 === 0) 
(ceil(-.7) === 0) 

編輯:一個有趣的(實現)RFC可以讀取here

+0

謝謝,我認爲罪魁禍首是圓的() - 正在被應用於我的一些價值觀的方法。 – 2009-10-15 08:14:39

5

由於Gurdas說,你可以有你的數據庫中的強類型。除此之外,我不知道你的問題的答案,但我知道我將如何解決這個問題。

這個問題,據我所知,是你不知道在哪些情況下,你得到'-0',順便說一句,這是一個有效的floating point representation of 0。所以你必須找到你在哪些情況下得到的。我會採取兩種途徑之一:

  1. 使用Xdebug,引發錯誤在數據庫中插入代碼時的值爲「-0」,以獲得與參數的stack_trace(使用xdebug.collect_params = 1)
  2. 在腳本的開頭創建一個空字符串,用所有操作和操作數按原樣填充結果和行。之後,在插入子句中添加一個if($ value =='-0'){print $ string; }
相關問題