HIVE длинные десятичные результаты
В кусте, когда вы выполняете оператор SELECT ниже, он возвращает 1.20000000000000002 как результат вместо 1.2.
выберите 1,1 + 0,1;
На самом деле, мы делаем то же самое в наших таблицах улья при сохранении аналогичного значения FLOAT, поэтому я хочу спросить об этом. Спасибо
1 ответ
Вот как работает арифметика с плавающей точкой. Если вам нужна точность, cast
результат как decimal
,
select cast(1.1+0.1 as decimal(9,1))
Десятичные литералы обеспечивают точные значения и больший диапазон для чисел с плавающей запятой, чем тип DOUBLE. Десятичные типы данных хранят точные представления числовых значений, в то время как типы данных DOUBLE хранят очень близкие приближения числовых значений.
Десятичные типы необходимы для случаев использования, в которых (очень близкого) приближения DOUBLE недостаточно, таких как финансовые приложения, проверки на равенство и неравенство и операции округления. Они также необходимы для случаев использования, которые имеют дело с числами вне диапазона DOUBLE (приблизительно от -10308 до 10308) или очень близко к нулю (от -10-308 до 10-308). Для общего обсуждения ограничений типа DOUBLE, см. Статью Wikipedia Формат с плавающей запятой двойной точности.