MySQL中round()四舍五入之坑

计算数值时,因将一个数值由代码四舍五入改成SQL四舍五入做整数处理而产生了误差。该字段为varchar类型,修改后的计算结果与之前的结果当小数位为.5四舍五入进位时,竟然出现误差。例如2.5,当字段类型为varchar或double类型时,使用round函数,结果为2,而decimal则进位正常。

执行SQL:SELECT c_varchar,round(c_varchar),c_double,round(c_double),c_decimal,round(c_decimal) from round_test

运行结果:2.5 2 2.50 2 2.50 3

参考相关资料,看到有人说将字段值相加一个不影响结果的小数后,数值可以正常,测试一下,的确如此。

执行SQL:SELECT c_varchar,round(c_varchar+0.000001),c_double,round(c_double+0.000001),c_decimal,round(c_decimal) from round_test

运行结果:2.5 3 2.50 3 2.50 3

具体原因,后续分析。。。

原文地址:https://www.cnblogs.com/liujianwang/p/9245751.html

时间: 2024-10-06 00:23:26

MySQL中round()四舍五入之坑的相关文章

mysql中关于count的坑

结论,当列所在行值为 null 时,count(列名) 是不会把 null 值计算出来的.而count(*) , count(1) 等方式是会计算的. [1]mysql中关于count的坑 有什么坑呢?当 count(col1)时,col1所在列的行值为 null 时,不统计. [2]null 在count(*) / count(1) 和 count(col) 的区别 结论,当列所在行值为 null 时,count(列名) 是不会把 null 值计算出来的.而count(*) , count(1

python爬取微博图片数据存到Mysql中遇到的各种坑\python Mysql存储图片

本人长期出售超大量微博数据,并提供特定微博数据打包,Message to [email protected] 前言   由于硬件等各种原因需要把大概170多万2t左右的微博图片数据存到Mysql中.之前存微博数据一直用的非关系型数据库mongodb,由于对Mysql的各种不熟悉,踩了无数坑,来来回回改了3天才完成. 挖坑填坑之旅 建表 存数据的时候首先需要设计数据库,我准备设计了3个表 微博表:[id, userid, blog_text, lat, lng, created_time, res

MySQL中ROUND和TRUNCATE的区别

1.ROUND可以进行四舍五入,按照对应的位数 2.TRUNCATE直接按照位数截取,不四舍五入 实例: SELECT ROUND(RAND(),4),TRUNCATE(RAND(),4); 版权声明:本文为博主原创文章,未经博主允许不得转载.

关于MySQL中存储类型为Float,使用jdbc查询时丢失精度,或者自动四舍五入的问题

一.   mysql表结构: member_price列的数据类型是float(20,2)(注: 表示最多20位浮点数,精度为2位) 插入记录: INSERT INTO `member_price` (`id`, `data_type`, `month`, `member_count`, `member_price`, `create_at`) VALUES ('1', '1', '2015-11', '5864', '1765910.8745120', '1450078966586'); IN

MySQL 巨坑:永远不要在 MySQL 中使用 UTF-8

最近我遇到了一个bug,我试着通过Rails在以"utf8"编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误: Incorrect string value: 'e??? <-' for column 'summary' at row 1 我用的是UTF-8编码的客户端,服务器也是UTF-8编码的,数据库也是,就连要保存的这个字符串" <-"也是合法的UTF-8. 问题的症结在于,MySQL的"utf8"实际上

MySQL中的内置系统函数

MySQL中的内置系统函数 用在SELECCT语句, 能及子句 where order by having 中 UPDATE DELETE, 函数中可以将字段名作为变量来用,变量的值就是这个列对应的每一行记录 一.字符串函数 php中用的函数,MySQl中大部也提供 1. CONCAT(S1,S2....SN): 把传入的参数连接成一个字符串 2. INSERT(str, x, y, insert): 将字符串X位置开始,y个字符串长度替换为字符串insert 3. LOWER(str) UPP

Mysql中常用的函数

控制流函数IFNULL(expr1,expr2)如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境. mysql> select IFNULL(1,0); -> 1 mysql> select IFNULL(0,10); -> 0 mysql> select IFNULL(1/0,10); -> 10 mysql> select IFNULL(1/0,'yes');

mysql中函数(转)

一.数学函数ABS(x)   返回x的绝对值 BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x)   返回大于x的最小整数值EXP(x)   返回值e(自然对数的底)的x次方FLOOR(x)   返回小于x的最大整数值GREATEST(x1,x2,...,xn)返回集合中最大的值LEAST(x1,x2,...,xn)      返回集合中最小的值LN(x)                    返回x的自然对数LOG(x,y)返回x的以y为底的对数MOD

【转】MySql中的函数

原文:http://www.cnblogs.com/kissdodog/p/4168721.html MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: 系统信息函数: 加密函数: 格式化函数: 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. 函数 作用 ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 SELECT CEIL(1.5) -- 返回