首页 > 解决方案 > 计算时如何修复雪花中的舍入误差?

问题描述

尝试执行以下计算时,我在雪花中遇到舍入错误。

select ROUND(84186926/91.0)*91.0

我得到的答案是 84186921。但是,正确的答案是 84186926。

有没有办法解决这个舍入错误?

提前致谢。

标签: snowflake-cloud-data-platform

解决方案


首先欢迎使用浮点数。如果您84186926 / 91.0在 Windows Calculator925131.0549450549 中,如果您* 91给出了您期望的答案,您会得到哪个。

上面的雪花默认为小数点后 6 位,所以84186926 / 91.0给你925131.054945 你然后使用ROUND()默认为零小数位的函数,所以你得到925131 然后你乘以91.0,给84186921

因此,即使您将右括号移到ROUND(4186926/91.0*91.0)您会得到4186926,因为现在您正在 ROUNDING84186925.9..但实际上您永远不应该先进行除法,因为您会失去精度,4186926*91.0/91.0因为精度4186926.000000损失(除法)是最后完成的。

另一种选择是使用具有您需要的固定精度的格式,number(30,15)因此84186926::number(30,15)/91.0::number(30,15)给出925131.054945054945055但实际上您应该交换操作的顺序。


推荐阅读