2012-05-24 76 views
0

如果我在MySQL中添加一个表是这样的:MySQL的SUM返回错误值

CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `value` float NOT NULL, 
    PRIMARY KEY (`id`) 
); 

并添加一个条目:

INSERT INTO `test` (`value`) VALUES ('123.45'); 

,并做了SUM上这样说:

SELECT SUM(value) 
FROM `test` 

为什么它返回123.449996948242而不是123.45?

+4

http://floating-point-gui.de/ – assylias

回答

2

这是因为浮点不准确。改为使用DECIMAL数据类型。

CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `value` decimal(8,2) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

见这个例子:SQLFiddle

0

因为浮点数大约有一些精密的“问题”:你的机器

  1. 精度(您可以存储位的数量有限)
  2. 表示错误
  3. 等等......
0

你试过

SELECT 
     ROUND(SUM(value), 2) 
FROM `test`