mysql中float和double精度问题,sum奇怪的结果-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

2016-06-29 13:18:42 3586 1

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

见下面 sql:

a 是 bigint,b 是 float(5,4), c 是 float(8,4), d 不是数据库里的字段是我要的结果。

b 数据都是 0.2211 之类的数据,c 是 0.0032 之类的数据。

SELECT

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

FROM

tablea

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

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

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

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:49:01

    float(8,4) 后面的 8 和 4 是显示的精度,而不是内部表示的精度。

    如果想要精确值,可以使用 numeric(M,D) 或者 decimal(M, D)。

    里面涉及到的具体细节,参考我的博客:

    代码之谜(四)- 浮点数(从惊讶到思考)
    代码之谜(五)- 浮点数(谁偷了你的精度?)

    0 0
相关问答

4

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 127247浏览量 回答数 4

18

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 1046896浏览量 回答数 18

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157760浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 337099浏览量 回答数 8

38

回答

[@饭娱咖啡][¥20]对于慢sql有没有什么比较实用的诊断和处理方法?

江小白太白 2018-10-30 18:47:38 142134浏览量 回答数 38

2

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 129157浏览量 回答数 2

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259905浏览量 回答数 38

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305701浏览量 回答数 249

97

回答

Redhat/CentOS一键安装web环境全攻略

xiaofanqie 2011-08-11 14:51:38 123736浏览量 回答数 97

2

回答

区域选择帮助

fanyue88888 2012-12-07 15:54:30 204425浏览量 回答数 2
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载