计算时如何解决雪花中的舍入误差?

问题描述

尝试执行以下计算时,雪花出现舍入错误

select ROUND(84186926/91.0)*91.0

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

是否可以解决此舍入错误

谢谢。

解决方法

首先欢迎使用浮点数。 如果您在Windows计算器中84186926 / 91.0,则会得到925131.0549450549 如果您* 91可以为您提供期望的答案,则为您提供

上方的雪花默认默认为6位小数,因此84186926 / 91.0为您提供925131.054945 然后,您将使用ROUND()函数,该函数默认为零小数位,因此您将获得925131 然后乘以91.0,得到84186921

因此,即使您将右括号移到ROUND(4186926/91.0*91.0)上,您也会得到4186926,因为现在您正在84186925.9..周围,但实际上,您永远都不要在损失时先进行除法精度,4186926*91.0/91.0给出了4186926.000000,因为最后失去了精度(除法)。

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