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

时间:2018-06-05 17:12:08

标签: mysql precision accounting

有人能告诉我在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

1 个答案:

答案 0 :(得分:1)

这就是为什么你没有在四舍五入的重要事项中使用浮点值的原因。即使manual说:

  

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