MariaDB中DOUBLE(10,2)与字符串比较结果不一致问题求助
问题:DOUBLE(10,2)列字符串参数精确匹配异常及替代方案
我需要查询数据表中类型为DOUBLE(10,2)的amount列,要求做精确匹配。但受数据库驱动限制,必须把金额参数以字符串形式绑定,大部分情况正常,但部分值匹配失败。
示例1:匹配成功的情况
比较3.94与'3.94'时,执行以下SQL:
SELECT CAST('3.94' AS DOUBLE(10,2)) = '3.94' `comp`, CAST('3.94' AS DOUBLE(10,2)) `cast`, '3.94' `string`;
数据库返回结果显示二者相等:
comp cast string 1 3.94 3.94
示例2:匹配失败的情况
但比较7.94与'7.94'(示例代码中写的是4.94)时,执行以下SQL:
SELECT CAST('4.94' AS DOUBLE(10,2)) = '4.94' `comp`, CAST('4.94' AS DOUBLE(10,2)) `cast`, '4.94' `string`;
数据库判定二者不等:
comp cast string 0 4.94 4.94
明明显示的值看起来一致,却匹配失败,推测是舍入误差导致,但尚未完全理解具体原因。现寻求除以下方案外的更优解决办法:
SELECT * FROM `my_amounts_table` WHERE `amount` = CAST(:amount AS DECIMAL(10,2));
编辑补充
浮点数不应做相等性检查,针对上述场景,是否需要用范围查询来匹配7.94?比如:
SELECT * FROM `my_amounts_table` WHERE (`amount` > 7.93 AND `amount` < 7.95)
内容的提问来源于stack exchange,提问作者Peter Scopes
相关产品推荐
相关产品推荐

