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

Viewed 23

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)

1 Answers

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