2011-05-07 45 views
2

我在表中有4.3浮點值。浮點值無法實現WHERE子句

當發送該請求:

SELECT * FROM mytable WHERE floatfield = 4.3 

是返回一個空結果。

即使嘗試;

SELECT * FROM mytable WHERE floatfield = '4.3' 

什麼問題?

+0

檢查這個問題:http://stackoverflow.com/questions/2188139/check-for-equality-on-a-mysql-float-field – 2011-05-07 15:28:48

回答

4

Floating-point does not have infinite precision4.3不能完全用有限數量的二進制數字表示。

+0

二進制浮點(世界上幾乎每個計算機系統使用的)都不能在有限數量的位中精確地表示4.3。 – 2011-05-07 14:20:38

+0

@Donal:是的,那個。 – 2011-05-07 14:20:58

2

使用列LIKE float而不是Column = float。不要理解這個術語,它可能只是從值的起始處開始匹配,或者刪除看不見的精確數字並將其視爲varchar。

+0

答案適用於我的情況,但是對它的工作原理的技術解釋會受到歡迎。 – Nilzor 2013-03-20 10:14:54

0

您可以使用以下功能:

DELIMITER $$ 
DROP FUNCTION IF EXISTS `x_cast_to_float`$$ 
CREATE FUNCTION `x_cast_to_float`(number FLOAT) RETURNS FLOAT 
    NO SQL 
    BEGIN 
     RETURN number; 
    END$$ 
DELIMITER ; 

SELECT * FROM mytable WHERE floatfield = x_cast_to_float(4.3)<br />