Я пытаюсь добиться такой же степени точности (количество цифр после десятичной запятой) для результатов, поступающих из SELECT, который выполняет некоторые уравнения.
- Есть ли какая-либо разница с точки зрения производительности, хорошая практика использования в случае достижения требуемой точности между CAST () или ROUND () помимо округления до последнего?Есть ли лучшая альтернатива?
Для простоты значения во всех приведенных ниже примерах жестко закодированы, они могут или не могут быть получены из столбцов таблицы
Я использую MySQL 8.
Если вы запустите пример E1
:
-- E1
SELECT (41/99);
-- 0.4141
, вы получите 4 цифры после десятичной точки.
Есть ли какая-либо настройка MySQL, которая может принести более высокую точность прямо из коробки, поэтому мне не нужно использовать:
- E2 SELECT ROUND ((41/99), 20);- 0,41414141400000000000
- или
SELECT CAST ((41/99) AS DECIMAL (21,20));- 0,41414141400000000000
Как получить больше точности десятичных знаков от E2
, если для расчета используются данные типа int?
Если вы укажетеДля данных с десятичной точкой вы получаете гораздо более высокую точность:
-- E3
SELECT ROUND((41.0/99.0), 20);
-- 0.41414141414141414100
SELECT CAST((41.0/99.0) AS DECIMAL(21,20));
-- 0.41414141414141414100
Для меня важно избегать типов данных с плавающей запятой из-за их аппроксимации десятичных дробей.Если данные поступают из столбца таблицы, столбец будет иметь десятичный тип данных.Но данные для расчетов также могут быть жестко закодированы.