码迷,mamicode.com
首页 > 其他好文 > 详细

hive 中的float和double

时间:2017-09-26 14:51:03      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:employee   查询   nbsp   sele   employees   name   存在   结果   原因   

 表employees中字段 taxes(税率)用类型float存储

 

hive> select name, salary, taxes from employees where taxes  > 0.2

 

john    5300.0    0.2

marry  9500.0   0.2

jack     15000.0 0.3

 

产生如上结果原因为:

a) 对于所有使用IEEE标准进行浮点编码系统中,都普遍存在如下问题,并不仅仅是hive,Java,还有很多

b) 0.2在hive中默认使用double 8字节,对应真实结果为 0.200000000001

c) taxex中作为float存储那么0.2对应真实结果为 0.2000001

d) 因此对上面查询必然会出现 float类型的0.2大于 double类型的 0.2因此出现 jon marry的查询结果。

 

对如上修改方式如下:

a) 修改employees表字段taxes为string,然后比较时用 where taxes  > ‘0.2‘

b) 修改employees表字段taxes为double,然后比较时依旧用 where taxes  > 0.2

c) 表employees不做修改,查询时使用  where taxes  > cast(0.2 as  float)

hive 中的float和double

标签:employee   查询   nbsp   sele   employees   name   存在   结果   原因   

原文地址:http://www.cnblogs.com/qiuhong10/p/7596490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!