You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:32:39