mysql中float和double精度问题,sum奇怪的结果

今天开发中遇到了一个问题,感觉很奇怪。

见下面 sql:

abigintbfloat(5,4), cfloat(8,4), d 不是数据库里的字段是我要的结果。

b 数据都是 0.2211 之类的数据,c0.0032 之类的数据。

SELECT
    sum( ceil(a *(1 - b))* c ) AS d
FROM
    tablea

如果不加上 sum,我会得到 31.4600137.7000124.7000 这类数据(小数点最后一位均为0),但是我加上 sum 后,最后一位有数了。
我意识到是数据类型精度的问题,把 c 改成了 double 类型之后,就得到了正确的结果。

请问,我用 float 类型的时候,没有得到正确结果是什么原理?是 c(8,4) 问题??
c(8,4) 使得 0.0032,变成了 0.0032123(最后三位随机了)??


补充一下,abc 所有值都是已经在数据库里的,不是临时插入的。

阅读 22.8k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题