Я не могу понять, почему мои результаты отличаются:
У меня есть стол заказы и колонка цена (тип двойной в 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)?
Я не могу понять, что не так, я думаю, что-то с кастингом.
Может ли кто-нибудь объяснить мне это?
Я не могу комментировать, поэтому я пишу вам ответ.
Прочитай это: http://dev.mysql.com/doc/refman/5.7/en/problems-with-float.html
Данные Float и Double, не храните точные числа, поэтому можно найти странные проблемы.
Попробуйте CEIL, как сказал AT-2016, надеюсь, вы найдете решение.
Если тип данных является плавающим, используйте приведение
ВЫБЕРИТЕ раунд (приведение (кол-во в десятичном виде (10,2)) * 0,99,2) ОТ заказов ГДЕ 1
В конце концов я преобразовал свои столбцы в десятичные 15,2. Я немного боялся риска с конвертацией, после нескольких тестов нет никакой разницы в общей сумме цен. Я рекомендую сделать это для всех, у кого есть эта проблема.