doris中select cast(1.123 as decimal(4,1))=1.1;返回0bug

Viewed 44

select cast(1.123 as decimal(4,1))=1.1;
0
row in set(0.01 sec)
select cast(1.123 as decimal(4,1))
1.1
row in set(0.82 sec)

3 Answers

新版本已解决

在 SQL 中,虽然 DECIMAL 类型表示小数,但是其内部存储和比较可能涉及到一些微小的浮点数误差。所以才不会相等。
可以使用ROUND明确控制小数点后的精度,将两个值限制为同样的精度的比较,这样的结果就一致了,
SELECT CAST(ROUND(1.123, 1) AS DECIMAL(4,1)) = 1.1;

看一下FE 配置文件是否有这个配置项:enable_decimal_conversion
如果其值是false,改成true试试。修改配置后,需要重启FE。