У меня есть таблица со следующими данными:
Площадь ВАРЧАР(50), ДЕСЯТИЧНЫЙ доход (20,2), Расход ДЕСЯТИЧНЫЙ (20,2), DECIMAL (6,2)
Эти значения были импортированы из электронной таблицы, а выставленный процент недостаточно точен. Округляется до 2 знаков после запятой. Я могу рассчитать его, взяв доход / расход, но я не получаю ожидаемого значения.
Выберите * из вернет «Счетчик», -1822,90, 2749,63, 0,66
-1822,90 / 2749,63 = -0,6629619.... абсолютное значение которого будет округлено до 66,3%, что является необходимой мне точностью.
Так почему же тогда, когда я запускаю следующий запрос: Выберите область, (доход / расход) AS calcPercentBilled, PercentBilled из
Я получаю: «Счетчик, -1822,90, 2749,63, 1,000000, 0,66?
Я предполагаю, что это что-то странное с MySQL и типами, но я не могу понять, что происходит. Почему MySQL округляет деление двух десятичных чисел в запросе до 1.000000?
Проблема заключается в типе данных, который вы указали для PercentBilled.
DECIMAL(6,2)
означает сохранить значение с 6 цифрами с 2 из них после запятой. Поэтому, чтобы повысить точность хранимого значения, вам нужно изменить тип столбца, возможно, на DECIMAL(9,6)
. Это позволит сохранить значение в вашем примере как «0,662962» (т.е. шесть знаков после запятой).
Обратите внимание, что простое обновление типа столбца не изменит недостающую точность, если вы повторно не импортируете данные из источника. Простое изменение типа данных без повторной загрузки данных изменит его на «0,660000».
ну, в MySQL 5.7, если я сделаю то же самое, я получу «0,662962». т. е. создать таблицу foo (x decimal (20,2), y decimal (20,2)); вставить в foo значения (-1822,90, 2749,63); выберите (x/y) как z из foo; дает z = 0,662912 какую версию MySQL и какой клиентский инструмент вы используете?
Еще одна вещь: у вас появляется «1.00000» (т.е. +1), но одно из ваших чисел отрицательное, поэтому ответ также должен быть отрицательным. Вы уверены, что случайно не разделили столбец? как «выбрать (x/x) как z из foo» в приведенном выше примере дает z = 1,000000
Хорошо, я ID710T. Это был не тот столбец, но это был неправильный столбец. Я заметил это после того, как расширил запрос до нескольких областей, и были другие значения, которые также указывали на это.
Рад был помочь. Часто просто задать вопрос заставляет вас прочитать все заново.
Может быть, я был недостаточно конкретен. Я знаю, о чем вы говорите, но я пытаюсь вычислить другие цифры после 0,66 в запросе на выборку, потому что в электронной таблице будет только 2 цифры точности. Я до сих пор не знаю, почему запрос выбора округляется до 1,00000 вместо 0,6629619.