为什么浮点列上的mysql sum()会生成分数

mwg9r5ms  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(539)

有人能告诉我为什么mysql sum()函数在float列上执行会产生奇怪的结果吗?
例子:

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()时,mysql返回浮点数,预期为6.09:

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

这对一个可能会发展的人来说是相当可怕的,比如说。。。会计软件!:/
版本:MySQL5.5.60

ubby3x7f

ubby3x7f1#

这就是为什么在舍入很重要的地方不使用浮点值。甚至手册上也说:
decimal和numeric类型存储精确的数字数据值。当需要保持精确精度时(例如货币数据),可以使用这些类型。

相关问题