有人可以告诉我为什么在FLOAT列上执行的MySQL 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返回该浮点数:

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


对于一个可能会说出...会计软件的家伙来说,这真是吓人。 :/

版本:Mysql 5.5.60

最佳答案

这就是为什么在舍入很重要的任何情况下都不要使用浮点值的原因。甚至manual都说:


  DECIMAL和NUMERIC类型存储精确的数字数据值。当保留精确度很重要时,例如使用货币数据,则使用这些类型。

10-08 07:06
查看更多