2016-10-11 1 views
1

я не могу понять, почему мои результаты разные:Округление в 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: // stackoverflow.com/questions/10446581/mysql-round-weird-bug –

+0

Этот URL-адрес может быть полезен при использовании функции MySQL ROUND (http://www.w3resource.com/mysql/mathematics-functions/mysql-round-function.php) –

+1

Очень маловероятно, что вы бы хотели DOUBLE для «цены». См. DECIMAL. – Strawberry

ответ

1

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

Best data type to store money values in MySQL

2

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

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

Float и Double данные, не хранят точные цифры, так что можно найти странные вопросы.

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

2

Если тип данных использовать поплавок отливать ВЫБЕРИТЕ раунд (бросание (кол-во как десятичное (10,2)) * 0.99,2) FROM Orders WHERE 1

 Смежные вопросы

  • Нет связанных вопросов^_^