2012-07-24 105 views
6

我正在寫一個PHP腳本,看起來通過浮點值,這往往是有點小,比如一個數據庫表:爲什麼MySQL以科學記數法返回一些浮點數,而不是其他數據?

0.00052 
0.00134 
0.00103 
0.00149 
0.00085 
0.00068 
0.00077 
0.00088 
0.00169 
0.00063 

不知什麼原因對我來說,一些值出現在DB科學表示法中,如:

1.12305e-06

表被設定爲浮置,並且我嘗試的功能的全部方式在PHP迫使編號,以顯示爲小數,也沒有用。儘可能地嘗試,我無法讓這個數字表在所有情況下始終保持十進制。

有關如何解決此問題的任何建議?試過typcasting到(float)和每次使用number_format()等幾個選項,但沒有任何變化。

+0

不知道把我的頭頂部,但不會在科學記數法MySQL的顯示值?我知道PHP確實如此。你能否展示一個更完整的測試用例來說明你如何處理這些值? – deceze 2012-07-24 08:58:51

+2

你如何顯示這些信息以發現它們是以這種格式顯示的?它是像這樣返回它們的mysql嗎,還是它實際上只是php的表示?你使用'var_dump','echo','print'等? – Nanne 2012-07-24 08:58:55

+1

你沒有使用「DECIMAL」數據類型的原因? – Romain 2012-07-24 08:59:29

回答

2

人們似乎對什麼是顯示出CLI(可能其他地方)的六位限制。你有的例子是1.12305e-06,它是0.00000112305,它將顯示爲0.00000 - 儘管顯然它不是零。

如果你堅持使用浮動或雙打,你將不得不強迫他們使用像round(columnName,5)之類的東西來強制顯示十進制值。否則,可能會切換到decimnal數據類型。

http://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html

因爲浮點值是近似的,而不是存儲爲精確值,試圖爲準確對待他們在比較中可能會導致問題。他們也受到平臺或實施依賴關係的影響。有關更多信息,請參見第C.5.5.8節「Problems with Floating-Point Values

另請參閱mysql論壇上有關此確切問題的此thread

0

在我的情況的解決方案竟然是從浮動改變爲十進制類型在數據庫中,所以感謝羅曼的評論,導致我考慮這樣做的解決方案!

相關問題