hive 中的float和double

 表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)

posted @ 2017-09-26 14:05  hongma  阅读(3220)  评论(0编辑  收藏  举报