Вимоги: Часто використовується для округлення і не дуже чутливий до вимог до точності.
Щоб досягти округлення двох знаків після десятки, розробник написав наступний код,
Код дуже простий, розробникиФактичний результат був 12.12, що суперечило очікуваному результату округлення 12.13。
Причина такого результату полягає в тому, що Math.Round за замовчуванням не використовує правило округлення, а раунди для отримання парних результатів.
Округли до п'яти, щоб зробити пару
Так зване округлення від шести до п'яти для отримання пари означає, що після визначення значущих цифр, якщо наступна значуща цифра менша або дорівнює 4, її округлюють вниз; якщо вона більша або дорівнює 6 — округлюють вгору на один. Коли наступна значуща цифра дорівнює 5,
- Якщо число перед 5 непарне, округли п'ять і далі на одиницю
- Якщо 5 перед парним числом, пропустіть 5 (0 — парне).
Статистично округлення до парного є точнішим, ніж округлення до п'яти, оскільки при великій кількості обчислень округлення кожних п'яти до одного може призвести до більшого числа.
Наприклад:
1,15+1,25+1,35+1,45 = 5,2
Якщо значні цифри дорівнюють одному знаку після десятки, результат отримується за принципом округлення
1,2 + 1,3 + 1,4 + 1,5 = 5,4
Результат, отриманий округленням до п'яти парних чисел, має вигляд
1,2 + 1,2 + 1,4 + 1,4 = 5,2
Це показує, що правило округлення дає більш точні результати.
Math.Round
Отже, як ви використовуєте Math.Round для досягнення очікуваного округлення?
Насправді, Math.Round у C# пропонує багато методів перевантаження, зокрема два методи:
Обидва методи надають третій параметр, який називається mode, який є перелічувальною змінною MidpointRounding з двома вибраними значеннями
- AwayFromZero — округлення
- ToEven — округлення до рівного округлення
Отже, якщо ми хочемо ідеально округлений результат, можна використати наступний код:
Середня точка Округлення перерахування, як показано нижче:
Посилання:Вхід за гіперпосиланням видно. |