关闭

mysql中统计精度问题

930人阅读 评论(0) 收藏 举报
分类:
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内存是以字符串存储的,

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2347次
    • 积分:127
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论