MySQL中ROUND四舍五入函数需要注意的地方
类别:数据库 浏览量:450
时间:2017-3-5 MySQL中ROUND四舍五入函数需要注意的地方
MySQL中ROUND四舍五入函数需要注意的地方一、问题描述
1、有如下一个数据表test,建表语句如下
CREATE TABLE test (
id int(11) NOT NULL AUTO_INCREMENT,
field1 bigint(10) DEFAULT NULL,
field2 decimal(10,0) DEFAULT NULL,
field3 int(10) DEFAULT NULL,
field4 float(15,4) DEFAULT NULL,
field5 float(15,4) DEFAULT NULL,
field6 float(15,4) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、向这个表中插入一条数据
INSERT INTO test (field1, field2, field3, field4, field5, field6) VALUE (100, 100, 100, 1.005, 3.5, 2.5);
3、如果执行下面这个SQL,结果会是什么样的呢?
SELECT
round(field1 * field4),
round(field2 * field4),
round(field3 * field4),
round(field1 * 1.005),
round(field2 * 1.005),
round(field3 * 1.005),
round(field5),
round(field6)
FROM test;
4、执行后的结果
*************************** 1. row ***************************
round(field1 * field4): 100
round(field2 * field4): 100
round(field3 * field4): 100
round(field1 * 1.005): 101
round(field2 * 1.005): 101
round(field3 * 1.005): 101
round(field5): 4
round(field6): 2
1 row in set (0.00 sec)
备注:最初一直以为这样的结果肯定是都是101,因为上面这六个取值结果都是对100 * 1.005进行四舍五入,结果肯定都是101才对,而后面两个肯定是4和3才对,但是最终的结果却是与设想的大相径庭
二、ROUND随机函数出现这种情况的原因
mysql官方文档中关于ROUND函数的部分,其中包含下面两条规则
1、对于精确的数值,ROUND函数使用四舍五入
2、对于近似值,则依赖于底层的C函数库,在很多系统中ROUND函数会使用“取最近的偶数”的规则
3、通过这两条规则,我们可以看出,由于我们在使用两个字段相乘的时候,最终的结果是按照float类型处理的,而在计算机中float类型不是精确的数,因此处理结果会按照第二条来,而直接整数字段与1.005这样的小数运算的结果是因为两个参与运算的值都是精确数,因此按照第一条规则计算。
4、从field5和field6执行ROUND函数的结果可以明确的看确实是转换为了最近的偶数。
三、MySQL中ROUND备注
在MySQL中使用ROUND还是要非常需要注意的,特别是当参与计算的字段中包含浮点数的时候,这个时候计算结果有可能是不准确的。
标签:MySQL
您可能感兴趣
- mysql如何给一个表批量添加字段(mysql从一张表查询批量数据并插入到另一表中的完整实例)
- mysql新增字段并添加备注(mysql添加备注信息的实现)
- mysql数据字段默认值怎么设置(MySQL 字段默认值该如何设置)
- navicat连接mysql报错(解决Navicat Premium 连接 MySQL 8.0 报错"1251"的问题分析)
- 查看mysql支持的字符集(不可忽视的MySQL字符集)
- mysql客户端怎么运行程序(MySQL 如何连接对应的客户端进程)
- mysql索引应该注意的地方(关于MySQL索引知识的小妙招)
- mysql5.5.36版本介绍(WDCP控制面板升级mysql为5.7.11的方法)
- mysql关联查询详解(详解mysql 组合查询)
- mysqlexplain解析(Mysql explain用法与结果深入分析)
- phpstudymysql数据库启动不了(phpstudy mysql启动不了的解决方法)
- druid数据库连接池原理详解(阿里巴巴Druid,轻松实现MySQL数据库加密!)
- mysql能groupby两个字段吗(MySQL group by语句如何优化)
- mysql操作时间的函数(一篇文章搞定Mysql日期时间函数)
- mysql长连接释放和不释放的问题(解决MySQL存储时间出现不一致的问题)
- mysql怎么创建联合索引(mysql的联合索引复合索引的实现)
- 小米Watch S1评测 或许能成为小米冲击高端可穿戴设备的里程碑(小米WatchS1评测或许能成为小米冲击高端可穿戴设备的里程碑)
- 手机QQ与小米路由器在一起 明天揭晓,敬请期待(手机QQ与小米路由器在一起)
- 小米音乐与 QQ 音乐合作,便捷迁移会员(小米音乐与QQ音乐合作)
- 小米推出米兔儿童电话手表奥特曼版,799 元,支持微信 QQ(小米推出米兔儿童电话手表奥特曼版)
- 贾怀胤唱《白龙马》 炸场 了 没想到京剧还能这么玩(贾怀胤唱白龙马)
- 白龙马的改编学生版,快来看看(白龙马的改编学生版)
热门推荐
- vue 动态绑定指令(vue动态绑定图标的完整步骤)
- java温度转换自动识别(Apache Calcite 实现方言转换的代码)
- MySQL中interactive_timeout和wait_timeout
- phpmysql怎么搭建(PHP使用PDO、mysqli扩展实现与数据库交互操作详解)
- MVC中JavaScriptResult
- laravel数据库日志(Laravel 将数据表的数据导出,并生成seeds种子文件的方法)
- sql server内外连接的作用(浅谈SQL Server交叉联接 内部联接)
- php对象模型(PHP数据对象映射模式实例分析)
- docker虚拟化容器使用教程(Docker安装ClickHouse并初始化数据测试)
- 云服务器是什么技术(云服务器系统选择的依据是什么?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9