snowflake-cloud-data-platform - 计算时如何修复雪花中的舍入误差?
问题描述
尝试执行以下计算时,我在雪花中遇到舍入错误。
select ROUND(84186926/91.0)*91.0
我得到的答案是 84186921。但是,正确的答案是 84186926。
有没有办法解决这个舍入错误?
提前致谢。
解决方案
首先欢迎使用浮点数。如果您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
但实际上您应该交换操作的顺序。
推荐阅读
- python - 我想将变量分配给我的回复中返回的前 3 个“标题”
- c# - Navigation.PushAsync 在 Xamarin 表单的用户控件中不起作用
- python - 将参数传递给我正在使用 exec 函数从另一个 python 文件执行的 python 文件
- ios - 将 React Native 集成到现有的 Native iOS 中,出现 pod install 错误
- python - 如何使用模态调用views.py的函数
- amazon-web-services - 如何通过 ECS ContainerDefinitions 中的 CloudFormation 从 AWS 参数存储中注入值
- c++ - 调用 'unordered_set< 向量的隐式删除的默认构造函数
>' - jquery - 过滤表的总和
- node.js - 如何在 NodeJS SDK 中使用 transloadit addStream() 函数?
- node.js - mongoDB express-session中的所有活动会话