为什么 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.
有人能告诉我为什么 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.