我一直在蜂巢工作,發現一些奇特的東西。基本上,在使用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這只是一個示例。這是相同的,即使我試着用數字 –