zoukankan      html  css  js  c++  java
  • SQL 对float类型列进行排序引发的异常

    车祸现场

    要求:根据学分和完成时间获取前200名学员,当学分相同时,完成时间较早的排在前面

    可以明显看到,完成时间为4.1号的记录排在了3.27号前面。

    事故原因

    float 表示近似数值,存在精度损失,数据类型是 float(n),n是可选的,默认类型是float(53),占用8bytes。虽然n的取值范围是1-53,实际上,float 只能表示两种类型float(53) 和 float(24),分别占用 8Bytes 和 4Bytes。

    近似数值很难确定是否相等,应当避免用来做相等=判断,只用来做>或<判断。同理当对float类型的字段进行排序时,就有可能会出现意想不到的结果。

    解决方案

    修改学分字段的类型,将float替换为decmial。

    decimal不存在精度损失,没有近似值,最大精度为 38,这意味着,decimal 数据类型最多可以存储 38位数字,所有这些数字均可位于小数点后面

  • 相关阅读:
    第二期冲刺会议3
    第二期站立会议2
    意见汇总及改进方案
    第二期站立会议1
    第一期站立会议7
    第一期站立会议6
    第一期站立会议5
    第一期站立会议4
    第一期站立会议3
    第一期站立会议2
  • 原文地址:https://www.cnblogs.com/cplemom/p/10845896.html
Copyright © 2011-2022 走看看