hive的floor函数,ceil函数,round函数

摘要:
Round#执行[7]:40round#未执行[8]:40round#未完成[9]:340round#执行[10]:340round#已执行[11]:400round#已完成[12]:500当需要使用时,最好编写一个函数包装器来转换它,或将精度位5添加到1,然后使用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

## 欢迎交流讨论

免责声明:文章转载自《hive的floor函数,ceil函数,round函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇树莓派研究笔记(4)-- 镜像服务器连接不上视频编码 率失真性能评价指标:PSNR SSIM BD-rate BD-PSNR下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

postgresql笔记

一旦任何有价值的对象被转移到新所有者,可以使用DROPOWNED命令删除被删除角色所拥有的任何剩余对象。此外,DROPOWNED不会删除整个数据库或表空间。因此,如果角色有任何尚未转移到新所有者的数据库或表空间,则需要手动删除它们。DROPOWNED还将注意到,对于不属于目标角色的对象,删除授予目标角色的任何特权。因为REASSIGNOWNED不会接触这些对...

用arduino做一个智能垃圾桶

这些天我几乎很忙。我有一些时间继续打扰我的arduino。上一次我从TB购买arduino套件时,有一个人体热能感应模块,用于感应人体接近信号。今天我们用这个做一个简单的智能垃圾桶。要实现的功能是:当有人靠近时,垃圾可以自动打开盖子,当人离开时,盖子可以自动关闭。1、 所需材料和工具:1 Arduino SCM我使用Arduino Nano 2人体热能传感模...

oracle的序列号(sequence)

Oracle的自动递增列应使用序列号。在初始化阶段,需要手动创建序列,然后在插入序列时手动读取分配给相关字段(如ID)的序列的nextval。这很麻烦。但是,这对于SQL Server来说不是问题,可以获得。oracle的序列号也有缓存。默认情况下,一次生成20个。如果没有用完,它们可能会丢失,这可能会导致ID不一致。此外,有时这可能会引起误解。例如,我有一...

Nginx反向代理缓冲区优化

为了为不同域名的业务需求设置代理_ bufferingproxy_缓冲参数用于控制是否打开后端响应内容的缓冲区_缓冲区将缓冲到硬盘(缓冲区目录由_temp_path命令指定),...

ActiveMQ教程(消息发送和接受)

activemq全部<版本>{版本}</版本>名称为ActiveMqUtilitimportjava。util。日期importorg.apache.activemq.activemq连接//创建链接Connectionconnection=null;61616");...

「Docker」关于 Docker volume 挂载时文件或文件夹不存在的问题

背景:Dockervolume允许我们在启动Docker容器时动态装载一些文件以覆盖图像中的原始文件。然而,当我们将主机上不存在的文件夹或文件装载到容器时会发生什么?由于文件装载仅覆盖单个文件,而不会影响容器中同一文件夹中的其他文件,因此通常用于装载配置文件,以在运行时动态修改默认配置。如果您尝试提前在主机/文件夹路径/A中放置一些内容,您会发现在容器启动后...