zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    Linux网络编程--socket
    UDP学习总结
    TCP协议学习总结
    DNS协议总结
    DHCP协议总结
    ARP协议总结
    二层协议--MPLS协议总结
    二层协议--LLDP协议总结
    二层协议--LACP协议总结
    二层协议--STP协议总结
  • 原文地址:https://www.cnblogs.com/qiuhong10/p/7596490.html
Copyright © 2011-2022 走看看