我在表中有4.3浮点值。浮点值无法实现WHERE子句
当发送该请求:
SELECT * FROM mytable WHERE floatfield = 4.3
是返回一个空结果。
即使尝试;
SELECT * FROM mytable WHERE floatfield = '4.3'
什么问题?
我在表中有4.3浮点值。浮点值无法实现WHERE子句
当发送该请求:
SELECT * FROM mytable WHERE floatfield = 4.3
是返回一个空结果。
即使尝试;
SELECT * FROM mytable WHERE floatfield = '4.3'
什么问题?
Floating-point does not have infinite precision和4.3
不能完全用有限数量的二进制数字表示。
二进制浮点(世界上几乎每个计算机系统使用的)都不能在有限数量的位中精确地表示4.3。 – 2011-05-07 14:20:38
@Donal:是的,那个。 – 2011-05-07 14:20:58
使用列LIKE float而不是Column = float。不要理解这个术语,它可能只是从值的起始处开始匹配,或者删除看不见的精确数字并将其视为varchar。
答案适用于我的情况,但是对它的工作原理的技术解释会受到欢迎。 – Nilzor 2013-03-20 10:14:54
您可以使用以下功能:
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 />
检查这个问题:http://stackoverflow.com/questions/2188139/check-for-equality-on-a-mysql-float-field – 2011-05-07 15:28:48