为什么 MYSQL FLOAT 列上的 SUM() 生成分数

Why MYSQL SUM() on FLOAT columns generates fractions

有人能告诉我为什么 MySQL 在 FLOAT 列上执行 SUM() 函数会给出奇怪的结果吗?

示例:

CREATE TABLE payments (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    amount FLOAT DEFAULT NULL,
    PRIMARY KEY(id)
);

INSERT INTO payments (amount) VALUES (1.3),(1.43),(1.65),(1.71);

执行 SUM() 时,期望 6.09,MySQL returns 浮点数 :

mysql> SELECT SUM(amount) FROM payments WHERE 1;
+--------------------+
| SUM(amount)        |
+--------------------+
| 6.0899999141693115 |
+--------------------+
1 row in set (0.00 sec)

这对于一个可能开发比方说...会计软件的人来说是相当可怕的! :/

版本:Mysql5.5.60

这就是为什么在四舍五入很重要的地方不使用浮点值的原因。即使 manual 也说:

The DECIMAL and NUMERIC types store exact numeric data values. These types are used when it is important to preserve exact precision, for example with monetary data.