Я знаю, что это плохая идея хранить десятичные значения как float в mysql.
Пример. Если я храню товар по цене 5,01 доллара, точного представления этого числа с плавающим типом не существует.
Если я это сделаю:
CREATE TABLE IF NOT EXISTS `test` (
`test` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `test` (`test`) VALUES
(5.01);
и затем вы запускаете запрос
SELECT AVG( test )
FROM test
против этой таблицы вы получите:
mysql> select avg(test) from test;
+------------------+
| avg(test) |
+------------------+
| 5.01000022888184 |
+------------------+
1 row in set (0.00 sec)
однако, если вы выберете только поле, подобное этому:
mysql> select * from test;
+------+
| test |
+------+
| 5.01 |
+------+
1 row in set (0.00 sec)
вы получите правильную сумму.
Мой вопрос: как это может быть?
Если тип с плавающей запятой не может точно представлять мое значение?
Разве выбор не должен возвращать 5.01000022888184?