我一直在蜂巢工作,发现一些奇特的东西。基本上,在使用double作为列的数据类型时,我们不需要指定任何精度(hive根据值动态获取精度)。但是,这是问题。每当我的值是2和7小数点后我看到返回值也改变了精度位置的数量。蜂巢 - 双精度
让我明确一点,用我的简单例子。
hive> select cast('34.2234' + '32.6554' -3.1 as double);
OK
63.7788
Time Taken 0.077 seconds, Fetched: 1 row(s)
当我在小数点后使用1(3.1中减1)时,我可以看到结果似乎很好。但是,当3.2或3.7,给出了减法,我看到下面的变化
在使用3.2
hive> select cast('34.2234' + '32.6554' -3.2 as double);
OK
63.678799999999995
Time Taken 0.077 seconds, Fetched: 1 row(s)
在使用3.7
hive> select cast('34.2234' + '32.6554' -3.7 as double);
OK
63.178799999999995
Time Taken 0.077 seconds, Fetched: 1 row(s)
虽然结果似乎是正确的,为什么是在这种情况下精度得到改变。当我们使用小数点前的任何值并且在它之后只有2或7时(如4.2,4.7,3.2,2.7等),它是相同的。它与2和7相比有什么特别之处,它将精度改为15个值,为什么不将其他值更改为15。
你为什么要对字符串进行算术运算? –
'double'数据类型以科学记数法存储,可能会损失精度。使用'十进制' –
@DuduMarkovitz这只是一个示例。这是相同的,即使我试着用数字 –