Double 精度损失问题
2021年12月14日 朋友给了行代码
SELECT
CAST(4.2 AS double) / cast(3 AS bigint)
使用 ClickHouse 执行了一下,结果是:
1.4000000000000001
这里出现了精度损失,我们希望的结果是 1.4
。如何解决这个问题,找寻答案的过程中看到了一句话:
二进制方式的浮点数表示不是精确的
Reference:https://bbs.csdn.net/topics/90388247
然后我有了灵感,既然浮点数是不精确的(二进制下),那么将被除数先转换为“整型”,进行运算后,再转为浮点数不就可了。
SELECT
CAST(4.2 * 10 AS double) / cast(3 AS bigint) /10
这下结果就是 1.4
了。