2017-01-05 2 views
0

У меня вопрос о запросе, который я запускаю на сервере MySQL (v5.5.50-0 + deb8u1).MySQL round in query, неправильный результат

SELECT 12 - (SELECT qty FROM Table WHERE id = 5213) AS Amount 

так значение Сумма составляет 12 - 8,5500000000000007 = 3,4499999999999993

Но если я запускаю запрос:

SELECT qty FROM Table WHERE id = 5213 

он возвращает 8,55, что является правильным число, записанное в записи, так Я ожидал, что первое querty вернется 3.45.

Столбец «qty» в таблице «Таблица» является DOUBLE.

Как это возможно? Как я могу получить правильный ответ из запроса? заблаговременно

+2

Добро пожаловать в мир операций с плавающей запятой. –

ответ

2

Хорошо, это just the way floating numbers are.

Номера с плавающей запятой иногда вызывают замешательство, поскольку они являются приблизительными и не сохраняются как точные значения. Значение с плавающей запятой как , написанное в выражении SQL, может быть не таким, как значение , представленное внутри страны.

Это утверждение справедливо и для многих языков программирования. Некоторые цифры даже не имеют точного представления. Вот кое-что из python manual

Проблема легче понять сначала в базе 10. Рассмотрим дробь 1/3. Можно аппроксимировать, что в качестве базовой фракции 10:

0,3 или, лучше,

0,33 или, лучше,

0.333 и так далее. Независимо от того, сколько цифр вы хотите записать, результат никогда не будет ровно 1/3, но будет все более приближенным к 1/3.

Точно так же, независимо от того, сколько базовых 2 цифр вы хотите использовать , десятичное значение 0,1 не может быть представлено точно как база 2 . В основании 2, 1/10 является бесконечно повторять дробь

Так короче обычно делают это float1 = float2 тип сравнения плохая идея, но все продолжает забывать это.

0

Вы можете определить столбец «qty» как десятичный (10,2)

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