问题描述
尝试执行以下计算时,雪花出现舍入错误。
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
,但实际上您应该交换操作顺序。