Округление в MySQL не работает, как ожидалось

Я не могу понять, почему мои результаты отличаются:

У меня есть стол заказы и колонка цена (тип двойной в MySQL).

цена значение в базе данных 13,5.

запрос:

SELECT ROUND(price * 0.09, 2) FROM orders where id = 1;

результат: 1,21

запрос:

SELECT ROUND(13.5 * 0.09, 2);

результат 1,22

без округления: SELECT 13.5 * 0.09 результат 1,215

так что правильный результат после раунда 1,22.

Почему запрос SELECT ROUND(price * 0.09, 2) FROM orders where id = 1; дает мне неправильный результат (1.21)?

Я не могу понять, что не так, я думаю, что-то с кастингом.

Может ли кто-нибудь объяснить мне это?

1

Решение

Я не могу комментировать, поэтому я пишу вам ответ.

Прочитай это: http://dev.mysql.com/doc/refman/5.7/en/problems-with-float.html

Данные Float и Double, не храните точные числа, поэтому можно найти странные проблемы.

Попробуйте CEIL, как сказал AT-2016, надеюсь, вы найдете решение.

2

Другие решения

Если тип данных является плавающим, используйте приведение
ВЫБЕРИТЕ раунд (приведение (кол-во в десятичном виде (10,2)) * 0,99,2) ОТ заказов ГДЕ 1

2

В конце концов я преобразовал свои столбцы в десятичные 15,2. Я немного боялся риска с конвертацией, после нескольких тестов нет никакой разницы в общей сумме цен. Я рекомендую сделать это для всех, у кого есть эта проблема.

Лучший тип данных для хранения денежных значений в MySQL

1
По вопросам рекламы [email protected]