2012-05-24 75 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`