hive查找float数据精度问题

在hive表中查找某个字段值为float类型的数据时,float类型可能存在精度问题造成的比较不准确
http://chengjianxiaoxue.iteye.com/blog/2276272
在比较浮点数时,有一个问题要注意,举例如下:
前提: 表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

产生如上结果原因为:

  1. 对于所有使用IEEE标准进行浮点编码系统中,都普遍存在如下问题,并不仅仅是hive,Java,还有很多
  2. 0.2在hive中默认使用double 8字节,对应真实结果为 0.200000000001
  3. taxex中作为float存储那么0.2对应真实结果为 0.2000001
  4. 因此对上面查询必然会出现 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)

    原文作者:analanxingde
    原文地址: https://www.jianshu.com/p/3fc4f50ad4cd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞