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

Adn*_*nan 2 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');
Run Code Online (Sandbox Code Playgroud)

所以表格如下:

在此输入图像描述

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

SELECT SUM(amount) FROM test; 
Run Code Online (Sandbox Code Playgroud)

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

任何想法为什么我不会得到小数四舍五入?

更新:

我已经在MySQL Server: 5.5.17(windows)和MySQL Server: 5.5.20Centos 上测试了这个

Ran*_*eed 5

这是浮点数由计算机表示的固有问题.基本上,基数10中的一些值(可以用有限数量的数字写入)不能在基数2中表示.

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

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