Athena运算顺序异常:SQL表达式计算结果不符合预期
Athena返回整数结果的原因分析
你遇到的这个情况,核心原因分为两种,均和四舍五入无关:
1. 浮点数精度的固有限制
Athena基于Presto(Trino)引擎,默认使用DOUBLE类型处理浮点运算,而DOUBLE的有效数字仅为15-17位。当你给一个较大的整数(比如示例中的120.0)添加极小的小数时:
- 若小分数小于当前数值的ULP(最低有效位单位),浮点数无法区分原数值和原数值加小分数的差异,直接返回原数值。以120.0为例,它的ULP约为1.47×10-14,只要你添加的小分数小于这个值(比如1×10-15),计算结果在DOUBLE类型中会被存储为120.0,这是浮点数的精度特性导致的,并非四舍五入。
2. 查询结果的默认格式化规则
如果你的小分数在浮点数可表示范围内(比如示例中的0.001),但Athena返回120.0,这是Athena控制台/客户端的默认显示规则导致的:
- Athena会自动简化浮点数的显示,省略末尾的零或极小的小数位,但实际计算结果是精确的。你可以通过显式指定格式验证:
执行这条语句会返回select cast((10.0*12+10/10000) as decimal(18,6))120.001000,证明实际计算值并未丢失。
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

