mysql中统计精度问题

原创 2015年07月08日 12:45:05
mysql数据统计
1在订单中计算orderPrice 分别用如下sql进行统计 得到结果如下
SELECT sum(order_price) as orderPrice,sum(price) as splitPrice FROM alipay_shop_split_record WHERE pass_status=1
数据a 1512151.11   数据b 1498940.31

SELECT round(sum(order_price),3) as orderPrice,round(sum(price),3) as splitPrice FROM alipay_shop_split_record WHERE pass_status=1 
数据a 1512151.110  数据b 1498940.314

由于截断误差造成的
因为现在的CPU都是算double的。 
float运算会被转化为double运算,结果四舍五入成float的精度。 
结果0.8999999999...就变成了0.9。 
double相减后面还有n个9,但是被简单截断隐藏了,它不会四舍五入。 
如果你格式化输出数字,你可以看到大约还有15或者16个9。


float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,

用于定义货币要求精确度高的数据。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Mysql的浮点精确度

1.mysql的用于记录小数的类型有三个float ,decimal 和double他们之间的关系 先创建一个表test都用了float ,decimal 和double 插入一条数据 再插入...
  • lingmao555
  • lingmao555
  • 2015年09月12日 09:58
  • 4893

mysql除法精度

Example: mysql> select 1*0.00001; +-----------+ | 1*0.00001 | +-----------+ | 0.00001 | +-----...
  • fyhjuyol
  • fyhjuyol
  • 2015年08月19日 13:13
  • 1147

mysql除法精度

update scp_fepstatus set SCP_VALID_RATA = TRUNCATE(SCP_RECORD_RECEIVE/SCP_RECORD_SEND,2)
  • ClamReason
  • ClamReason
  • 2014年01月24日 14:11
  • 5331

成佩涛编程之路——MySQL除法精度问题

最近在写一个SQL中遇到除法精度问题,比如: 1 SELECT 7185521/7185522 得出的结果是1,那么如...
  • CPTcpt123
  • CPTcpt123
  • 2014年05月13日 23:47
  • 1658

mysql 通过子查询实现两列相除

摘要:催收系统中有个根据前一天催收回单率排序的sql,其中:前一天催收回单率=前一天催收回单量/前一天的全部回单量,下面是对应的SQL语句: 一:查询前一天的回单量: SELECT coun...
  • sxdtzhaoxinguo
  • sxdtzhaoxinguo
  • 2016年12月13日 14:24
  • 3445

mysql 乘法精度

void Item_func_mul::result_precision() { /* Integer operations keep unsigned_flag if one of argu...
  • sharon_1987
  • sharon_1987
  • 2016年03月25日 11:55
  • 1618

mysql float精度与范围总结

FLOAT类型用于表示近似数值数据类型。SQL标准 允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。MySQL还支持可选的只用于确定存储大小的精度规定。0到23的精度对应 FL...
  • zhanghongzheng3213
  • zhanghongzheng3213
  • 2016年05月27日 17:22
  • 8429

mysql sum 统计字段数值类型是double出现精度失真问题

最近在报表统计信息时候,统计的字段值都是double类型的小数,使用sum累计求和的时候,意外出现很多位的小数 解决方法:将字段值转为指定精度的decimal数值,在进行sum求和...
  • qq6407521
  • qq6407521
  • 2017年07月21日 10:24
  • 906

mysql设置精度

div_precision_increment 该变量说用用/操作符执行除操作的结果可增加的精确度的位数。默认值是4。最小和最大值分别为0和30.下面的示例说明了增加默认值得结果。 mysql>...
  • ks3ks
  • ks3ks
  • 2016年05月10日 23:42
  • 159

MySQL里用存储过程实现加减乘除

MySQL从5.0版本开始支持存储过程procedure,下面介绍在MySQL5.1中使用存储过程实现整数的加减乘除。   创建存储过程时,需要依赖某个数据库,可以任意指定,比如数据库shop。 ...
  • sanqima
  • sanqima
  • 2016年03月26日 09:26
  • 8242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql中统计精度问题
举报原因:
原因补充:

(最多只允许输入30个字)