碰到一个很奇葩的问题,mysql默认是四舍五入的,但是,使用double,有时候不四舍五入。

犯罪现场还原

表结构

CREATE TABLE `test` (

`salary_decimal` decimal(11,2) DEFAULT NULL,

`salary_double` double(11,2) DEFAULT NULL

) ENGINE=InnoDB ;

表数据

salary_decimal 和 salary_double 分别插入 -96.845

很神奇的是,保存后,decimal的是 -96.85 ,double的是-96.84

然而,把double的精度从2增加到3,mysql会自动从 -96.84 变为 -96.845 差点亮瞎了我的眼睛

引发的问题

这样引发了两个问题:

1. 两边数据不一致,一个decimal是-96.85 一个double是-96.84

2. sum函数,结果不准确。使用double的表,求和的时候,会出问题。sum(-96.84+ -3.15)的结果不是 -99.99 而是 -100.00

结论

针对问题1,特意找了下资料,发现double本来就是不精准的

附上官网的解释

For FLOAT, the SQL standard permits an optional specification of the precision (but not the range of the exponent) in bits following the keywordFLOAT in parentheses. MySQL also supports this optional precision specification, but the precision value is used only to determine storage size. A precision from 0 to 23 results in a 4-byte single-precision FLOAT column. A precision from 24 to 53 results in an 8-byte double-precision DOUBLEcolumn.

针对问题2,有了问题1的前提,sum的结果自然也是不精准

mysql double 使用_mysql使用double的坑相关推荐

  1. mysql 转成树_mysql整形转换的坑

    select * from table where id = '$id' id如果输入12abc会怎样?,会把id=12的记录匹配出来,这是因为mysql会自动把12abc转换成整数12,当然前提是i ...

  2. mysql中的double类型_MySQL中float、double、decimal三个浮点类型的区别与总结!

    作者:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,原创文章, B站技术分享 个人博客: cnblogs.com 前端h ...

  3. mysql 字段字节_MySql字段类型及字节

    字段类型: TINYINT-----------------一个很小的整数.有符号的范围是-128到127,无符号的范围是0到255. SMALLINT--------------一个小整数.有符号的 ...

  4. mysql的单行注释_MySQL基础--会这些就够了

    先来总体看一下数据库.数据库表.表中数据的关系 DDL.DQL.DML针对的目标 1.什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数 ...

  5. mysql列别_MySQL基础及CRUD

    大纲 1. 数据库的基本概念 2. MySQL数据库软件 1. 安装 2. 卸载 3. 配置 3. SQL 1) DDL(Data Definition Language)数据定义语言 2) DML( ...

  6. mysql续型_mysql续集1

    2.6数据类型 2.6.1数据类型概览 #1. 数字: 整型:tinyinit int bigint 小数: float :在位数比较短的情况下不精准 double :在位数比较长的情况下不精准 0. ...

  7. mysql int(3)_MySQL中int(11)与int(3)的区别_MySQL

    11.2. 数值类型 MySQL支持所有标准SQL数值数据类型.这些类型包括严格数值数据类型(INTEGER.SMALLINT.DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT.RE ...

  8. mysql相关知识点_MySQL相关知识点

    MySQL 1.数据库的基本概念 1.数据库的英文单词:DataBase 简称:DB 2.什么数据库? *用于存储和管理数据的仓库 3.数据库的特点 1.持久化储数据的.其实数据库就是一个文件系统 2 ...

  9. mysql eva模型_mySQL第一天

    ##数据库的基本概念 1. 数据据库的英文单词:DataBase 简称:DB 2. 什么是数据库? 用于存储和管理数据的仓库 3. 数据库的特点 1. 持久化储存数据.其实数据库就是一个文件系统 2. ...

最新文章

  1. HDU 1155 Bungee Jumping
  2. # 关闭 window10自带广告 microsoft star
  3. spring mvc 总结
  4. 洛谷 P1851 好朋友
  5. python 将数组中取某一值的元素全部替换为其他元素的方法
  6. 中国在两年内赶超美国AI?李开复:不一定
  7. Python中定义函数的三种形式
  8. 18款帝豪gl车机升级_好看又实用的2018款帝豪GL分享,感受它的魅力
  9. linux emule 编译 wx-config --libs,LeezPi-RK3399_Android9编译说明
  10. c++成员声明中的非法限定名_new 一个对象有哪两个过程?很多人在面试中都问住了...
  11. java 学生成绩管理系统_学生成绩管理系统
  12. 网络空间安全和计算机科学与技术的区别,密码与网络空间安全学科有什么区别...
  13. 免费手机WAP网站大全
  14. 51单片机应用篇-- --倒计时数字钟,矩阵按键可调
  15. 数理方程与特殊函数|均匀各向同性介质内的热传导方程
  16. 如何让ie窗口显示到最前面
  17. 第七届蓝桥杯大赛个人赛--小明被绑架到X星球的巫师W那里
  18. 程序员如何快速上位当领导?
  19. 沐风:企业网络营销赚钱关键设计
  20. springBoot引入mysql数据库连接:errorCode1045,state28000的解决办法

热门文章

  1. java serializable用法_JAVA序列化Serializable及Externalizable区别详解
  2. Python字典列表字段重组形成新的字典
  3. python小整数池与大整数池
  4. python中的变量与对象
  5. python中的__str__ __name__ 和__call__方法
  6. python中,如何将多行进行输出,同时将行尾的换行符去掉
  7. java配置pom安装依赖包,Maven pom.xml 添加本地jar包依赖以及打包方法
  8. 【Github上有趣的项目】TensorKart 自动驾驶马里奥赛车(玩不了)
  9. win10如何使用语音输入文字功能?(语音识别)
  10. 鸢尾花识别问题,萼片有什么用?