У меня есть таблица цен. Каждая цена представляет собой FLOAT с двумя цифрами после точки. Из какой-то причины, когда я использую цену в выражении IF, результат тот же поплавок со многими дополнительными цифрами:Почему MySQL добавляет дополнительные цифры к плавающим?
mysql> select price, IF(1, price,0) as my_price from tbl_prices limit 10;
+-------+------------------+
| price | my_price |
+-------+------------------+
| 79.95 | 79.9499969482422 |
| 99.95 | 99.9499969482422 |
| 89.95 | 89.9499969482422 |
| 89.95 | 89.9499969482422 |
| 79.95 | 79.9499969482422 |
| 89.95 | 89.9499969482422 |
| 89.95 | 89.9499969482422 |
| 79.95 | 79.9499969482422 |
| 79.95 | 79.9499969482422 |
| 69.95 | 69.9499969482422 |
+-------+------------------+
10 rows in set (0.00 sec)
Как вы можете видеть, цены выглядит хорошо, однако результат IF выражения, возвращает то же самое цена содержит мусор.
Кто-нибудь знает, в чем причина этого мусора, и как я могу избавиться от него (без использования ROUND)?
Заранее благодарен!
I второй этот. НЕ используйте float для точных десятичных значений, так как многие из них не могут быть точно представлены в двоичном формате. Decimal работает вокруг этого, используя другой механизм хранения с точной семантикой. – gahooa
Спасибо, много работает! – diemacht