2012-06-16 34 views
2

我有一列只有一列'id'。表的創建語句是:當以兩種不同的方式使用Mysql輪功能時獲取不同的結果

CREATE TABLE `test` (
    `id` float default NULL 
); 

存在於表中的值是:

id 
----- 
8.075 

當我執行查詢:

SELECT ROUND(id, 2) FROM test; 

我得到的結果 '8.07' 。 但是,當我簡單地執行查詢:

SELECT ROUND(8.075,2); 

我得到的「8.08」值。

在兩種情況下可以做些什麼來獲得一致的結果?

這些查詢的演示可以查看here

回答

3

一輪的結果取決於文字8.075的隱式類型。

浮點數8.075在內部表示爲最接近可能的浮點數,即8.07499999999999928946,該數字四捨五入爲2位置8.07

如果文字8.075被解釋爲小數,那麼可能會應用「round-half-even」規則。我會查找它,但MySQL的網站現在正在運行。

+0

是的,但那麼你會如何將數字'8.075'(在mysql中存儲爲最接近可能的浮點數'8.07499999999999928946')來獲得結果8.08。 – sushil

+0

如果你需要這種行爲,那麼不要使用float,而應該用decimal。這是浮點數的一個衆所周知的限制,它們交換精度以表示比使用相似內存大小的整數大得多的範圍。 –

+0

非常感謝。我從來不知道十進制小數。小數解決了我的問題。 – sushil

相關問題