hive的floor函數,ceil函數,round函數


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

 

## 歡迎交流討論


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM