首页 > 解决方案 > HIVE 长小数结果

问题描述

在 hive 中,当执行以下 select 语句时,它返回 1.20000000000000002 作为结果而不是 1.2。

选择 1.1 + 0.1;

实际上,当存储类似的 FLOAT 值时,它在我们的 hive 表中做同样的事情,所以我想问这个问题。谢谢

标签: hivehue

解决方案


这就是浮点运算的工作原理。如果您需要精度,cast则结果为decimal.

select cast(1.1+0.1 as decimal(9,1))

来自 Hive 文档

十进制文字为浮点数提供了比 DOUBLE 类型更精确的值和更大的范围。十进制数据类型存储数值的精确表示,而 DOUBLE 数据类型存储数值的非常接近的近似值。

对于 DOUBLE 的(非常接近的)近似值不足的用例,例如金融应用程序、相等和不等式检查以及舍入运算,需要使用小数类型。对于处理超出 DOUBLE 范围(大约 -10308 到 10308)或非常接近零(-10-308 到 10-308)的数字的用例,也需要它们。有关 DOUBLE 类型限制的一般性讨论,请参阅 Wikipedia 文章Double-precision floating-point format


推荐阅读