這可能是一個容易的,但我無法得到答案。 我需要從表mysql浮點數據沒有選擇在哪裏條款
例如表中選擇浮點值: -
value
10.2
4.5
4.6
4.06
我的查詢
SELECT * FROM table where value = '4.6'
返回空結果集
我怎樣才能解決這個!
這可能是一個容易的,但我無法得到答案。 我需要從表mysql浮點數據沒有選擇在哪裏條款
例如表中選擇浮點值: -
value
10.2
4.5
4.6
4.06
我的查詢
SELECT * FROM table where value = '4.6'
返回空結果集
我怎樣才能解決這個!
使用decimal
而不是float
。
小數點(10,2)將有2個且只有2個小數位,並且可以用與整數相同的方式進行比較。 特別是對於單值,你應該使用總是使用十進制,但在任何舍入誤差不需要的地方,小數是一個不錯的選擇。
參見:http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html
通常,您不應該使用浮動檢查相等性(除非可能具有相同的對象)。在內部,它的表現更加精確,即使在它輸出到屏幕時它沒有顯示給你。這個基本原則適用於一般的計算。
有幾十個方案這樣做的,但這裏是一個簡單的,這應該是有意義:
SELECT * FROM table where value BETWEEN 4.599 AND 4.601
非常有用的解決方案。值-0.5和值+ 0.5之間很酷 – 2014-03-19 14:28:33
任何關於精度浮點數的想法都存儲在?我正在做BETWEEN(值0.000001)和(值+ 0.000001)...是否太限制? – plong0 2015-12-31 01:54:27
這個問題並不是精確的,但用數學來生成浮點數。在許多情況下,固定的epsilon(方差)很好,但是非常大(或很小)的浮點數會歪曲精度的重要性。另外,實際上微處理器之間甚至不同C編譯器之間會有差異,所以沒有真正的魔法/安全解決方案,特別是在像SQL這樣的4GL語言中。話雖如此,如果你的數字通常在相同的範圍內,你應該對上面說明的那種固定/絕對epsilon很好。 – 2016-01-06 13:39:13
今天,我也遇到了同樣的情況,並得到解決只是使用MySQL的格式化功能,它會返回你的WHERE子句完全匹配的結果。
SELECT * FROM yourtable WHERE FORMAT(`col`,2) = FORMAT(value,2)
說明:
FORMAT('col name',precision of floating point number)
希望它能幫助。
這有助於在批准的答案建議時無法將列類型從float更改爲decimal。 – 2017-08-30 12:55:47
你寫:
SELECT * FROM table where round(value, 1) = 4.6
[MySQL中選擇浮動]的可能重複(http://stackoverflow.com/questions/1302243/selecting-a-float-in-mysql) – Johan 2011-05-26 08:25:07