#std535¶
Округление результатов арифметических операций в запросах¶
1.¶
Если в операции деления заранее известны порядки числителя и знаменателя, по возможности избегайте деления заведомо маленького числа на заведомо большое.
2.¶
При арифметических операциях в запросах платформа обычно поддерживает точность до 8 знаков после запятой. Но из-за особенностей разных СУБД реальная точность может отличаться.
Подробнее: Разрядность результатов выражений и агрегатных функций в языке запросов.
Если на разных СУБД получается разная точность в операциях:
- деления;
СРЕДНЕЕ;- умножения (когда у каждого множителя может быть дробная часть),
рекомендуется явно задавать разрядность оператором:
ВЫРАЗИТЬ применяйте к операндам, если на какой-то СУБД точность недостаточна.
ВЫБРАТЬ
ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель КАК Число(25,10))
/ ВЫРАЗИТЬ(Таблица.Знаменатель КАК Число(15,10)) КАК Результат
ИЗ Таблица КАК Таблица
Разрядность операндов задавайте минимально достаточной. Избыточно большая разрядность может ухудшить точность последующих вычислений и снизить скорость выполнения.
ВЫРАЗИТЬ применяйте к результату, если точность на всех СУБД достаточна, но отличается.
ВЫБРАТЬ
ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель / Таблица.Знаменатель КАК Число(30,10)) КАК Результат
ИЗ Таблица КАК Таблица
В ряде случаев целесообразно приводить и операнды, и результат:
ВЫБРАТЬ
ВЫРАЗИТЬ(
ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель КАК Число(25,10))
/ ВЫРАЗИТЬ(Таблица.Знаменатель КАК Число(15,10))
КАК Число(30,10)
) КАК Результат
ИЗ Таблица КАК Таблица