mariadb中的查询返回错误结果。 重现问题:
CREATE TABLE test_table (
ID int(4) NOT NULL AUTO_INCREMENT,
test_field double(20,2) DEFAULT NULL,
PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO test_table VALUES ('1', '1.12');
INSERT INTO test_table VALUES ('2', '1.13');
INSERT INTO test_table VALUES ('3', '1.14');
INSERT INTO test_table VALUES ('4', '1.15');
INSERT INTO test_table VALUES ('5', '2.24');
SELECT test_field FROM test_table WHERE test_field = '1.14'
Maria db返回没有。
如果我使用'1.13'
代替'1.14'
,则mariadb会正确返回一条记录。
据我所知,我不应该在值周围使用单引号,但我希望结果是正确的,因为单引号不是伪造的。这似乎是一种类型铸造问题,我认为它必须解决。
答案 0 :(得分:0)
在<{1}}或(m,n)
上 使用DOUBLE
。它导致额外的舍入。
由于FLOAT
和DOUBLE
不是精确的十进制数,因此将FLOAT
与DOUBLE
进行比较是愚蠢的。
DECIMAL
转换为二进制。但是当转换回小数时,你会得到接近1.14
的东西。
结论:不要使用1.1400000000000001
来测试=
或DOUBLE
值。并且不要与FLOAT
一起使用。