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。
## 欢迎交流讨论