Округлення результатів арифметичних операцій в запитах, курси 1с - методичні матеріали

Методична рекомендація (корисну пораду)

1. Якщо в операції ділення заздалегідь відомі порядки чисельника і знаменника, то слід по можливості уникати виконання ділення числа явного маленького порядку на число свідомо великого порядку. Наприклад, замість:

2. При виконанні арифметичних операцій в запитах до бази даних платформа 1С: Підприємства підтримує точність обчислень до 8 розрядів дробової частини. Однак, через особливості роботи різних СУБД в деяких ситуаціях точність результатів може відрізнятися від 8. Більш детально про обчисленні розрядності результатів можна почитати в статті ІТС Розрядність результатів виразів і агрегатних функцій в мові запитів.

Якщо точність результату виконання запиту до бази даних, що містить

  • арифметичні операції ділення,
  • агрегатні функції СЕРЕДНЯ,
  • арифметичні операції множення, якщо кожен з множників може мати дробову частину,

різниться на різних СУБД, то рекомендується до операндам і / або результатами цих операцій застосовувати оператор явного приведення розрядності і точності числових даних:

Оператор ВИРАЗИТИ слід застосовувати до операндам, якщо на якій-небудь СУБД точність одержуваного результату недостатня. Наприклад, потрібно 10 розрядів після коми, а виходить 6.

При цьому зазначена загальна розрядність операндів повинна бути мінімальною, але не менша від тієї, яка достатня для представлення значень кожного з операндів. Невиправдане завищення розрядності може привести до втрати точності наступних обчислень і трохи знизити швидкість виконання запиту.

Важливо мати на увазі, що на різних СУБД є різні обмеження на максимальну розрядність десяткових чисел. Найжорсткіше обмеження - це 31 розряд в цілої і дробової частинах. Чим менше значення розрядності буде вказано для операндів, тим вище зможе бути точність результату. Наприклад, якщо в результаті потрібно не менше 10 розрядів дробової частини, перший операнд свідомо поміщається в 15 розрядів цілої частини, а другий операнд свідомо поміщається в 5 знаків цілої частини, то вираз може бути записано так:

Опрератор ВИРАЗИТИ слід застосовувати до результату, якщо точність обчислень на всіх СУБД достатня, але на деяких вона більше, а на інших менше. При цьому зазначена загальна розрядність результату повинна бути мінімальною, але не менша від тієї, яка достатня для представлення значень результату. Якщо в наведеному прикладі відомо, що Знаменник не може бути менше 0.00001, то для представлення результату досить 20 розрядів цілої частини. В цьому випадку вираз може бути записано так:

Іноді може бути доцільно виконати приведення до необхідної точності як операндов, так і результату. наприклад: