0

如果我在 MySQL 中添加这样的表:

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

并添加一个条目:

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

并像这样对其进行求和:

SELECT SUM( value )
FROM `test` 

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

4

3 回答 3

2

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

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

请参阅此示例:SQLFiddle

于 2012-05-24T15:38:39.837 回答
0

因为浮点数在以下方面存在一些精度“问题”:

  1. 您机器的精度(您可以存储的位数有限)
  2. 表示错误
  3. 很快...
于 2012-05-24T15:38:55.797 回答
0

你有没有尝试过

SELECT 
      ROUND( SUM(value), 2)
FROM `test` 
于 2012-05-24T15:47:52.807 回答