Mysql SUM函数返回返回错误的十进制值

时间:2013-05-15 11:02:49

标签: mysql sum

我有下表和测试数据集:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `desc` varchar(20) DEFAULT NULL,
  `amount` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8

    insert into `test` (`id`, `desc`, `amount`) values('5',NULL,'847.3');
    insert into `test` (`id`, `desc`, `amount`) values('6',NULL,'-847');
    insert into `test` (`id`, `desc`, `amount`) values('7',NULL,'847.3');
    insert into `test` (`id`, `desc`, `amount`) values('8',NULL,'-847');
    insert into `test` (`id`, `desc`, `amount`) values('9',NULL,'847.4');

所以表格如下:

enter image description here

现在我的问题是,当我使用时:

SELECT SUM(amount) FROM test; 

我得到以下结果847.9999999999999而不是预期的848

为什么我没有得到小数舍入的任何想法?

更新

我已在MySQL Server: 5.5.17(Windows)和MySQL Server: 5.5.20 Centos

上对此进行了测试

1 个答案:

答案 0 :(得分:5)

这是计算机代表floating-point numbers的方式所固有的问题。基本上,基数10中的某些值(可以使用有限位数写入)不能在基数2中表示。

大多数情况下,这种近似值不被注意,因为您只显示少量的十进制数字。但是当你开始添加并乘以这些近似值时,误差会累积到一个明显的值。

这就是DECIMAL类型存在的原因。它基本上将十进制值表示为整数,除以或乘以10的幂。使用这样的表示,不会进行近似。