hive的floor函數和ceil函數與python、sql等一致
1. floor函數
select floor(1.4) # 結果是:1
2. ceil函數
select ceil(1.4) #結果是:2
3. hive的round函數與python稍微有點差別
首先說hive的round:直接四舍五入
select round(1.455, 2) #結果是:1.46,即四舍五入到十分位 select round(1.5) #默認四舍五入到個位,結果是:2 select round(255, -1) #結果是:260,即四舍五入到十位,此時個位是5會進位
其次說python的round:這里是python3,對於小數的情形
round(1.8) #默認時,四舍五入均到個位,小數的話就會四舍五入取整了 Out[19]: 2 round(1.4) #默認時,四舍五入均到個位,小數的話就會四舍五入取整了 Out[22]: 1 round(1.345, 2) # 未進位 Out[79]: 1.34 round(1.145, 2) # 進位了,是不是很神奇。。。 Out[80]: 1.15
原因是:二進制轉換造成的精度損失
from decimal import Decimal #可用來查看保存的值 Decimal(1.345) Out[65]: Decimal('1.3449999999999999733546474089962430298328399658203125') #此時求 round(1.345, 2)是不是得到的值就是1.34了 Decimal(1.145) Out[66]: Decimal('1.145000000000000017763568394002504646778106689453125') #此時求 round(1.145, 2)是不是得到的值就是1.15了
然而,python3中對整數使用時,比較難理解,使用時需要謹慎!!!
round(35, -1) #進位了 Out[7]: 40 round(45, -1) #未進位 Out[8]: 40 round(345, -1) #未進位 Out[9]: 340 round(335, -1) #進位了 Out[10]: 340 round(355, -2) #進位了 Out[11]: 400 round(455, -2) #進位了 Out[12]: 500
必須使用時,最好寫函數包裝轉化一下,或者將為5的精度位+1,然后再用round。
## 歡迎交流討論