Персональний сайт - округлення чисел в Аксес

Вбудована функція

Використовуйте функцію Round () в джерелі даних текстового поля або в обчислюваному поле запиту.

Скажімо, у вас є такий вислів в рядку "Поле" в конструкторі запитів:






Податок: [Вартість] * [СтавкаНалога]
Щоб округлити до найближчої копійки, використовуйте:
Податок: Round ([Вартість] * [СтавкаНалога], 2)

округлення вниз

Щоб округлити все дробові цифри до найближчого цілого вниз, використовуйте Int ():
Int ([МоеПоле])

Всі ці числа будуть округлені вниз до 2: 2,1, 2,5, 2,8, and 2,99.

Щоб округлити вниз до найближчої копійки (напр. 10,2199 руб стають 10,21 руб), помножте на 100, округлятимете, і потім розділіть на 100:
Int (100 * [МоеПоле]) / 100

Зауважте, що виходить при округленні вниз негативних величин: Int (-2.1) дає -3, так як це і є ціле число знизу. Щоб округляти у напрямку до нуля. використовуйте Fix () замість Int ():
Fix (100 * [МоеПоле]) / 100

округлення вгору

Щоб округлити вгору до найближчого більшого цілого, скористайтеся способом, яким Int () округлює негативні числа:
- Int (- [МоеПоле])

Як показано вище, Int (-2.1) округлює вниз до -3. Тому такий вислів округлює 2,1 до to 3.

Щоб округлити вгору до найближчої копійки, помножте на -100, округлятимете, і розділіть на -100:
Int (-100 * [МоеПоле]) / -100

Округлити до найближчих 5 копійок

Щоб округлити до найближчих 5 копійок, помножте число на 20, округлите його, і розділіть на 20:
Round (20 * [МоеПоле], 0) / 20

Подібним чином, щоб округлити до найближчого четвертака, помножте на 4, округлятимете, і розділіть на 4:
Round (4 * [МоеПоле], 0) / 4

Округлити до 1000 руб.

Функція Round () в Excel приймає негативні числа в якості кількості місць від коми, напр. Round (123456, -3) округлює до 1000. На жаль, аксессовская функція цього не підтримує.

Щоб округлити до найближчих 1000 руб. розділіть на 1000, округлятимете, і помножте на 1000. Приклад:
1000 * Round ([Вартість] / 1000, 0)

Щоб округлити до 1000 руб. вниз. розділіть на 1000, отримаєте ціле число і помножте на 1000. Приклад:
1000 * Int ([Вартість] / 1000)

Щоб округлити до верхньої 1000 руб. розділіть на 1000 і помножте на -1 перед отриманням цілої величини. приклад:
-1000 * Int ([Вартість] / -1000)

Щоб округлити в сторону нуля. використовуйте Fix () замість Int ().







Альтернативно, призначена для користувача функція Кена Гетца поводиться в точності як упомнутая екселевскій функція.

Навіщо округляти?

Існує властивість Число десятічнизх знаків для полів в таблиці / запиті і для текстбоксов в формі / звіті. Це властивість впливає тільки на те, як поле відображається. а не на те, як воно зберігається. Число виглядає округленим, але при додаванні ряду чисел (напр. В примітці звіту), підсумок може «не битися".

Округляйте таке поле, коли ви робите обчислення і підсумкова сума зійдеться.

Це також відноситься і до грошових полях. Аксес відображає грошові поля округленням до найближчої копійки, але зберігає їх значення до сотої частки копійки (4 знака після коми.)

Банківська округлення

Функція Round () в Аксес використовує "банківське округлення". Коли останній значущою цифрою виявляється 5, вона округлює до найближчого парної цифри. Так, 0,125 округляється до 0,12 (2 парне), в той час як 0,135 округляється до 0,14 (4 парне.)

Головний сенс тут - рівність: 1,2,3, та 4 округлюються вниз. 6,7,8, і 9 - вгору. 0 не вимагає округлення. Так, якщо 5 весь час округляти вгору, ви отримаєте "зсунуті" результати - 4 цифри округлюються вниз, і 5 вгору. Щоб уникнути цього, "третій зайвий" (5) округляється відповідно до попередньої цифрою, що згладжує нерівність.

Помилки плаваючою комою

Дробові величини комп'ютер зазвичай трактує як числа з плаваючою крапкою. Аксессовскіе поля типів Подвійний точності (Double) або одинарної точності (Single) відносяться до такого типу. Тип "Подвійний точності" дає близько 15 знаків точності, сингл - 8 знаків (подібно ручному калькулятору).

Але ці числа є приблизними. Точно так же, як 1/3 вимагає нескінченної кількості знаків в десятковій системі, більшість чисел з плаваючою комою не можуть бути представлені точно в двійковій системі. Вікіпедія пояснює проблему точності. з якою ви стикаєтеся, оперуючи числами з плаваючою комою.

Резюме полягає в тому, що крайні цифри можуть не округлиться очікуваним вами чином, завдяки тому факту, що дійсні значення і відображаються не збігаються. Це стає особливо помітно при перевірці банківського округлення.

Один із способів уникнути подібних проблем - використовувати числа з фіксованою комою або мастшабірованние чісла.Тіп даних "Грошовий" в Аксес є типом з фіксованою комою: він завжди зберігає 4 десяткових знака.

Наприклад, відкрийте вікно Immediate Window (Ctrl + G) і введіть:
. Round (CCur (.545), 2), Round (CDbl (.545), 2)
Грошовий тип (перший) повертає 0,54, тоді як Подвійний точності - 0,55. Грошовий округлює коректно (до парної цифри 4); тип з плаваючою комою (Подвійний точності) некоректно. Подібним чином, якщо ви спробуєте 8,995, Грошовий коректно округлити вгору (до парної цифри 0), в той час як тип Подвійний точності округлити вниз (невірно.)

Грошовий тип справляється тільки з 4 десятковими знаками. Використовуйте масштабований тип Дійсний (Decimal), якщо вам потрібно більше знаків після коми.

Округлення дат і часу

Зверніть увагу, що тип Дата / Час в Аксес є особливим видом типу з плаваючою комою, в якому дрібна частина позначає час дня. Отже, поля типу Дата / Час з компонентою часу також схильні до помилок округлення.

Функція нижче округлює дату / час до зазначеної кількості секунд. Наприклад, щоб округлити до найближчого півгодини (30 * 60 seconds), використовуйте:
= RoundTime ([МоеПолеДатаВремя], 1800)

висновок

Для більш детального технічного пояснення теорії округлення в цілому, див. Статтю Клайва Максфілда (Clive Maxfield) An introduction to different rounding algorithms.







Схожі статті