2012-02-22 96 views
1

我試圖在MySQL中存儲浮點值,我的值似乎不斷變得混亂。 :(
我有我的領域定義爲float(10,7),我將他們之前已正確一輪PHP我的價值觀:存儲在MySQL中的浮點值不斷被搞亂

$rndval = round($val,7) 
INSERT INTO mytable (float) VALUES ($rndval) 

但是當我插入值,例如47.5206797,它顯示爲47.520679 我表,這是爲什麼?

+0

請張貼欄是如何在表中定義。 PHP中的所有「浮動」應該等同於其他語言中的「雙倍」。 – paulsm4 2012-02-22 23:59:38

+0

如上所述:type float(10,7) – cerr 2012-02-23 00:00:56

回答

5

如果您需要的值要精確,它存儲爲一個確切的數據類型,如DECIMAL(17,7),這將提供相同的範圍FLOAT(10,7)。唯一的缺點是,DECIMAL會佔用然而,比等效的FLOAT更多的磁盤空間與糾正浮點錯誤相比,s是微不足道的,因爲浮點錯誤是精度問題。

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

有關浮點數問題的詳細信息,下面可能是值得一讀

http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

+0

不錯,是的,這正是訣竅!謝謝西蒙! :) – cerr 2012-02-23 00:12:25

+0

@cerr:請注意,在'DECIMAL(10,7)'中,您只能將值從「999.9999999」存儲到「+ 999.9999999」。根據MySQL的設置,如果你試圖存儲一個不適合的值(比如'1267.3') – 2012-02-23 00:30:07

+0

,我猜想FLING(10,7)可能需要DECIMAL(17, 7)。我將刪除數據存儲點,因爲我對數字沒有信心。如果我是正確的,但DECIMAL需要9個字節,而FLOAT需要4個字節。 – 2012-02-23 00:32:59