2011-05-07 46 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 />