有人能告诉我为什么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
1条答案
按热度按时间ubby3x7f1#
这就是为什么在舍入很重要的地方不使用浮点值。甚至手册上也说:
decimal和numeric类型存储精确的数字数据值。当需要保持精确精度时(例如货币数据),可以使用这些类型。