Почему MYSQL SUM () для столбцов FLOAT генерирует дроби - PullRequest
0 голосов
/ 05 июня 2018

Может ли кто-нибудь сказать мне причину, почему функция 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 (), ожидая 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 голосов
/ 05 июня 2018

Вот почему вы не используете значения с плавающей запятой ни в чем, где важно округление.Даже руководство гласит:

Типы DECIMAL и NUMERIC хранят точные числовые значения данных.Эти типы используются, когда важно сохранить точную точность, например, с денежными данными.

...