Mathf.round метод
Содержание:
Дополнительные функции
Excel содержит и более специфические формулы, использование которых необходимо только в исключительных случаях.
Например, функция ОТБР, которая отбрасывает числа от установленного разряда, то есть происходит не округление, а отсечение.
Функция ОКРВВЕРХ позволяет округлять значение ячейки до целого числа, при этом, если необходимо округлить в большую сторону кратно 100, необходимо указать точность 100, а если до 50, то, соответственно, 50.
Формула ОКРВНИЗ, аналогична предыдущей, только округляется вниз до целого. В зависимости от выбранной точности, можно округлить и до 5, однако это работает только для диапазона значений от 5,00 до 9,99.
Чтобы убрать округление, достаточно удалить из формулы любую из перечисленных функций, при этом исходное значения числа примет первоначальный вид.
Как видите, MS Excel обладает большим набором инструментов для работы с числами. Плюсом является то, что округление можно применять и к суммам, и к результатам вычисления выражений или функций. Описанные выше функции подойдут, как для бухгалтеров и людей, работающих с большими объемами чисел, так и для простых пользователей.
Банковское округление в round()
Очень много идёт дискуссий (pythonworld, stackoverflow, форум linux.org.ru и др.) на тему, какое же всё-таки округление в python арифметическое или банковское (по другому ещё называют Гауссово округление)?
Оказывается в python 2 используется арифметическое округление, а в python 3 — банковское! Спасибо , по какому правилу идёт округление в разных python, благодаря подробному примеру и указанию на авторитетный источник.
Банковское (или бухгалтерское) округление позволяет уменьшить погрешности при работе с большим массивом данных. Обычное (или арифметическое) округление даёт нарастающую погрешность из-за того, что для округления в меньшую сторону на конце должны быть цифры: 1, 2, 3, 4 — всего 4 цифр, а в большую: 5, 6, 7, 8, 9 — всего 5 цифр. Неравное количество цифр при большом количестве вычислений и вызывают нарастающую погрешность.
При банковском округлении осуществляется округление к ближайшему чётному, то есть , . Таким образом вероятность того, что перед пятёркой окажется чётное или нечётное число для большинства случаев (к примеру, бухгалтерские расчёты) примерно одинаковая, поэтому такой принцип уменьшает погрешность.
Здесь вы можете увидеть подробности округления в официальных источниках документации python:
- Для python 2:
- Для python 3:
«if two multiples are equally close, rounding is done toward the even choice» (перев.: Округление делается до ближайшего четного) — это и есть банковское округление.
Но напоследок приведу пример, наглядно демонстрирующий разницу работы функции round() в различных версиях python и с учётом неточности представления типа :
| Пример | round() в python 2 | round() в python 3 | банковское округление |
|---|---|---|---|
| round(2.05, 1) | 2.0 | 2.0 | 2.0 |
| round(2.15, 1) | 2.1 | 2.1 | 2.2 |
| round(2.25, 1) | 2.3 | 2.2 | 2.2 |
| round(2.35, 1) | 2.4 | 2.4 | 2.4 |
| round(2.45, 1) | 2.5 | 2.5 | 2.4 |
| round(2.55, 1) | 2.5 | 2.5 | 2.6 |
| round(2.65, 1) | 2.6 | 2.6 | 2.6 |
| round(2.75, 1) | 2.8 | 2.8 | 2.8 |
| round(2.85, 1) | 2.9 | 2.9 | 2.8 |
| round(2.95, 1) | 3.0 | 3.0 | 3.0 |
Жирным выделил отличающиеся значения выполнения функции round().
Казалось бы в примере с результат для python 3 должен быть , потому как python 3 работает по банковскому округлению, но правильное значение , так как значение в машинном представлении не точное и выглядит для, к примеру, 60 знаков после запятой следующим образом:
>>> '%0.60f' % 2.15 '2.149999999999999911182158029987476766109466552734375000000000'
Отсюда видно, что по правилам обычного арифметического округления получаем .
Но для примера 60 знаков после запятой выглядят следующим образом:
>>> '%0.60f' % 2.25 '2.250000000000000000000000000000000000000000000000000000000000'
Вот здесь-то и возникает спорный момент по способу округления. Так для python 2 получаем — арифметическое округление.
А для python 3 получаем , что соответствует правилам банковского округления.
Материалы по теме:
Округление (Википедия)
Автор статьи
Права на использование материала, расположенного на этой странице https://vivazzi.pro/it/round-python/:
Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра в теге . Использование:
Автор статьи: Мальцев АртёмСсылка на статью: <a href="https://vivazzi.pro/it/round-python/">https://vivazzi.pro/it/round-python/</a>
Предыдущая статьяПример обработки formset
Следующая статьяsql перенос данных из одной таблицы в другую
Вам нужно саморазвиваться или вы хотите зарабатывать деньги?
Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации
Ознакомьтесь с реально работающими финансовыми инструментами
Wall Street Cash — Торговый робот на рынке Forex
Ознакомьтесь с роботом (советником), который автоматизирует торговлю на валютном рынке Forex без необходимости самому торговать. Преимущество робота в том, что вы сами контролируете свой счёт, а робот лишь по оптимизированным алгоритмам заключает сделки на куплю и продажу валют.
Подробнее о Wall Street Cash
Viva TM — Доверительное управление с использованием робота WSC
Доверительное управление Viva TM — это разработанный мной сервис по управлению вашими денежными средствами и заработку на рынке Форекс с использованием торгового робота Wall Street Cash.
Возможность использовать моё доверительное управление подходит тем, кто не хочет или не может самостоятельно настроить робота.
Подробнее о Viva TM
Округление чисел в Excel с помощью изменения формата ячейки
Если вы хотите округлить числа исключительно с целью презентации, вы можете изменить формат ячейки, выполнив следующие шаги:
- Кликнуть по ячейке с числовым значением;
- Открыть меню форматирования ячейки с помощью сочетания клавиш CTRL+1 или кликнуть по ячейке правой кнопкой и в выпадающем списке выбрать пункт “Формат ячеек“;
- В всплывающем окне “Формат ячеек” перейти на вкладку “Число“;
- В разделе “Числовые форматы” кликнуть по пункту “Числовой“;
- В меню окна найти пункт “Число десятичных знаков” и указать точное количество знаков после запятой, которое вы хотите оставить;
- Кликните по кнопке “ОК” для сохранения настроек форматирования.

Округление десятичных дробей
Дробь — это запись числа в математика, в которой a и b — числа или выражения. По сути, это всего лишь одна из форм, в которой можно представить число. Есть два формата записи:
- обыкновенный вид — 1/2 или a/b,
- десятичный вид — 0,5.
В десятичной дроби знаменатель всегда равен 10, 100, 1000, 10000 и т.д. Выходит, что десятичная дробь — это то, что получается, если разделить числитель на знаменатель. Такую дробь записывают в строчку через запятую, чтобы отделить целую часть от дробной. Вот так:
- 0,7
- 6,35
- 9,891
При округлении десятичных дробей следует быть особенно внимательным, потому что десятичная дробь состоит из целой и дробной части. И у каждой из этих частей есть свои разряды:
Разряды целой части:
- разряд единиц;
- разряд десятков;
- разряд сотен;
- разряд тысяч.
Разряды дробной части:
- разряд десятых;
- разряд сотых;
- разряд тысячных.
Разряд — это позиция, место расположения цифры в записи натурального числа. У каждого разряда есть свое название. Слева всегда располагаются старшие разряды, а справа — младшие.
Рассмотрим десятичную дробь 7396,1248. Здесь целая часть — 7396, а дробная — 1248
При этом у каждой из них есть свои разряды, которые важно не перепутать:

Чтобы округлить десятичную дробь, нужно в записи числа выбрать разряд, до которого производится округление.
То натуральное число, к которому дробь ближе, называют округленным значением числа.
Цифра, которая записана в данном разряде:
- не меняется, если следующая за ней справа цифра — 0,1, 2, 3 или 4;
- увеличивается на единицу, если за ней справа следует цифра — 5, 6, 7, 8 или 9.
Как округлить до целых. Заменить десятичную дробь ближайшим к ней целым числом. Ближайшим будет наименьшее расстояние. При этом если расстояние до приближенного значения числа с недостатком и расстояние до приближенного значения числа с избытком равны, то округляют в большую сторону.
Как округлить до десятых. Оставить одну цифру после запятой. Изи!
Как округлить до сотых. Оставить две цифры после запятой.
Все цифры, которые стоят справа от данного разряда, заменяются нулями. Если эти нули стоят в дробной части числа, то их можно не писать.
Оператор Round
А вы знаете, что при использовании для округления чисел в VBA Excel оператора Round, вы можете получить совершенно не тот результат, который ожидали? И ведь это действительно так!
Скопируйте в модуль VBA следующую процедуру и запустите ее выполнение:
|
1 |
SubTest_1() Dima1 AsSingle,a2 AsSingle,a3 AsSingle,a4 AsSingle a1=Round(1.5,) a2=Round(2.5,) a3=Round(3.5,) a4=Round(4.5,) MsgBox»Round(1.5, 0)=»&a1&vbNewLine&_ «Round(2.5, 0)=»&a2&vbNewLine&_ «Round(3.5, 0)=»&a3&vbNewLine&_ «Round(4.5, 0)=»&a4 EndSub |
В результате вы получите это:

Удивительно, не правда ли? Как же так получилось?
Дело в том, что оператор Round осуществляет «бухгалтерское» (или «банковское») округление, которое призвано при большом количестве таких операций свести погрешность к минимуму. Это достигается за счет того, что оператор Round использует при округлении правило, отличное от того, которое мы знаем еще со школы, когда округляемое число увеличивается на единицу, если отбрасываемое число равно пяти. Суть округления с помощью оператора Round состоит в том, что если перед отбрасываемой пятеркой стоит нечетная цифра, то она увеличивается на единицу (округление вверх), а если перед ней стоит четная цифра, то она не увеличивается (округление вниз).
Еще можно сформулировать «бухгалтерское» округление так: при отбрасывании пятерки число округляется к ближайшему четному
Обратите внимание, что в результатах нашего примера все полученные числа – четные.
Проверим погрешность:
- Сумма исходных чисел: 1.5 + 2.5 + 3.5 +4.5 = 12
- Сумма округленных чисел: 2 + 2 + 4 + 4 = 12
Результат получился просто идеальный для приведенного примера, так как суммы исходных и округленных чисел равны.
Дополнительные функции
Excel содержит и более специфические формулы, использование которых необходимо только в исключительных случаях.
Например, функция ОТБР, которая отбрасывает числа от установленного разряда, то есть происходит не округление, а отсечение.

Функция ОКРВВЕРХ позволяет округлять значение ячейки до целого числа, при этом, если необходимо округлить в большую сторону кратно 100, необходимо указать точность 100, а если до 50, то, соответственно, 50.

Формула ОКРВНИЗ, аналогична предыдущей, только округляется вниз до целого. В зависимости от выбранной точности, можно округлить и до 5, однако это работает только для диапазона значений от 5,00 до 9,99.

Чтобы убрать округление, достаточно удалить из формулы любую из перечисленных функций, при этом исходное значения числа примет первоначальный вид.
Как видите, MS Excel обладает большим набором инструментов для работы с числами. Плюсом является то, что округление можно применять и к суммам, и к результатам вычисления выражений или функций. Описанные выше функции подойдут, как для бухгалтеров и людей, работающих с большими объемами чисел, так и для простых пользователей.
Round(Double, Int32)
Math.Round(d, decimals) rounds a double-precision floating-point value to a specified number of fractional digits , and rounds midpoint values to the nearest even number.
Syntax
The syntax of Round(d, decimals) method is
Math.Round(Double d, Int32 decimals)
where
| Parameter | Description |
|---|---|
| d | The double-precision floating-point number to be rounded. |
| decimals | The number of decimal places in the return value. |
Return Value
The method returns rounded Double value.
Example 6 – Round(Double, Int32)
In this example, we will take some decimal double-precision floating-point numbers and round them to specific number of decimal points using Math.Round() method.
C# Program
using System;
class Example {
static void Main(string[] args) {
Double d, result;
Int32 decimals;
d = 10.2563;
decimals = 2;
result = Math.Round(d, decimals);
Console.WriteLine($"Round({d}, {decimals}) = {result}");
d = 10.63524;
decimals = 1;
result = Math.Round(d, decimals);
Console.WriteLine($"Round({d}, {decimals}) = {result}");
d = 10.5;
decimals = 0;
result = Math.Round(d, decimals);
Console.WriteLine($"Round({d}, {decimals}) = {result}");
}
}
Output
Round(10.2563, 2) = 10.26 Round(10.63524, 1) = 10.6 Round(10.5, 0) = 10
Округление натуральных чисел
Натуральные числа — это числа, которые мы используем, чтобы посчитать что-то конкретное, осязаемое. Вот они: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 и так далее.
Особенности натуральных чисел:
- Наименьшее натуральное число: единица (1).
- Наибольшего натурального числа не существует. Натуральный ряд бесконечен.
- У натурального ряда каждое следующее число больше предыдущего на единицу: 1, 2, 3, 4, 5, 6, 7.
Округление натурального числа — это замена его таким ближайшим по значению числом, у которого одна или несколько последних цифр в его записи заменены нулями.
Чтобы округлить натуральное число, нужно в записи числа выбрать разряд, до которого производится округление.
Правила округления чисел:
- Подчеркнуть цифру разряда, до которого надо округлить число.
- Отделить все цифры справа от этого разряда вертикальной чертой.
- Если справа от подчеркнутой цифры стоит 0,1, 2, 3 или 4 — все цифры, которые отделены справа, заменяем нулями. Цифру разряда, до которой округляли, оставляем без изменений.
- Если справа от подчеркнутой цифры стоит 5, 6, 7, 8 или 9 — все цифры, которые отделены справа, заменяем нулями. К цифре разряда, до которой округляли, прибавляем 1.
Давайте рассмотрим, как округлить число 57 861 до тысяч. Выполним первые два пункта из правил округления.

После подчеркнутой цифры стоит 8, значит к цифре разряда тысяч (в данном случае 7) прибавим 1. На месте цифр, отделенных вертикальной чертой, ставим нули.

Теперь округлим 756 485 до сотен:

Округлим число 123 до десятков: 123 ≈ 120.
Округлим число 3581 до сотен: 3581 ≈ 3580.
Если в разряде, до которого производится округление, стоит цифра 9 и необходимо ее увеличить на единицу — в этом разряде записывается цифра 0, а цифра слева в соседнем старшем разряде увеличивается на 1.
Примеры:
- как округлить число 697 до десятков — 697 ≈ 700;
- как округлить число 980 до сотен — 980 ≈ 1000.
Иногда уместно записать округленный результат с сокращениями «тыс.» (тысяча), «млн.» (миллион) и «млрд.» (миллиард). Вот так:
- 7 882 000 = 7 882 тыс.
- 1 000 000 = 1 млн.
Использование функций округления
Иногда нужно поменять точность расчетов с числовыми данными не для всего файла, а лишь для определенной области ячеек. В этом случае лучшим решением будет использование встроенных функций для работы с округлением чисел, которых существует несколько видов. Вот самые удобные и наиболее популярные:
- ОКРУГЛ – округление до числа с указанным количеством знаков после запятой по правилам математики.
- ОКРУГЛВВЕРХ – округление до ближайшего большего значения (по модулю).
- ОКРУГЛВНИЗ – округление до ближайшего меньшего значения (по модулю).
- ОКРУГЛТ – округление числа с желаемой точностью.
- ОКРВВЕРХ – округление с избытком до ближайшего числа, которое кратно заданному значению точности.
- ОКРВНИЗ – округление с недостатком до числа ближайшего числа, которое кратно заданному значению точности.
- ОТБР – округление до целого числа путем отбрасывания цифр после запятой.
- ЧЁТН – округление до ближайшего четного числа.
- НЕЧЁТ – округление до ближайшего нечетного числа.
Обобщенная формула для первых трех функций выглядит так: ФУНКЦИЯ(;). Например, для округления числа 3,14159265 до двух знаков после запятой, нам понадобится следующая формула: =ОКРУГЛ(3,14159265;2).
Пишем ее в нужную ячейку, не забывая в начале поставить знак равно.
После набора формулы щелкаем клавишу Enter и получаем в результате число 3,14.
В формулах функций ОКРУГЛТ, ОКРВВЕРХ и ОКРВНИЗ в качестве второго аргумента указывается кратность округления. Например, если стоит задача округлить число 13 до ближайшего числа, делящегося на 5 без остатка, следует написать следующую формулу: =ОКРУГЛТ(13;5).
Результатом вычисления будет число 15.
Последние три функции (ОТБР, ЧЁТН и НЕЧЁТ) используют всего 1 аргумент – само число или ячейка. Первая из них просто вернет его целую часть, а вторая и третья – ближайшее четное или нечетное числа, соответственно.
Сами функции можно прописать как внутри ячейки, так и в верхней строке формул, которая находится справа от надписи fx.
После того, как вы начнете вводить название функции, программа выдаст подсказки, благодаря которым можно выбрать точное название и избежать возможных опечаток. Перед написанием формулы не забывайте ставить знак равно (“=”).
В дополнение ко всему, есть возможность вызвать функци через вкладку “Формулы”. Откройте ее и выберите “Математические”. Появится список всех функций, расположенных по алфавиту, поэтому для поиска округления (ОКРУГЛ) нужно идти в нижнюю часть списка.
После того, как мы выберем нужную функцию, откроется окно для ее настройки.
В строке “Число” пишем координаты ячейки, значение которой нужно округлить. Также, вместо того, чтобы писать адрес ячейки вручную, можно просто находясь курсором в строке “Число” щелкнуть левой кнопкой мыши по нужной ячейке.
Далее переходим к строке “Число разрядов” и здесь пишем число знаков после запятой. Допустим, в нашем случае, пусть это будет 2.
После того, как все заполнено, нажимаем “OK” и получаем результат в первой строке, куда была вставлена функция округления.
Чтобы применить расчеты к остальным строкам столбца, наводим мышью на нижний правый угол ячейки, содержащей формулу. Курсор поменяет свой вид на небольшой крестик. Теперь, зажав его левой кнопкой мыши тянем формулу на оставшиеся строки, по которым нужно произвести расчет, после чего отпускаем кнопку.
Округление числа до указанного количества значимых разрядов
Значимые разряды — это разряды, которые влияют на точность числа.
В примерах этого раздела используются функции ОКРУГЛ, ОКРУГЛВВЕРХ и ОКРУГЛВНИЗ. Они показывают способы округления положительных, отрицательных, целых и дробных чисел, но приведенные примеры охватывают лишь небольшую часть возможных ситуаций.
В приведенном ниже списке содержатся общие правила, которые необходимо учитывать при округлении чисел до указанного количества значимых разрядов. Вы можете поэкспериментировать с функциями округления и подставить собственные числа и параметры, чтобы получить число с нужным количеством значимых разрядов.
Округляемые отрицательные числа прежде всего преобразуются в абсолютные значения (значения без знака «минус»). После округления знак «минус» применяется повторно. Хотя это может показаться нелогичным, именно так выполняется округление. Например, при использовании функции ОКРУГЛВНИЗ для округления числа -889 до двух значимых разрядов результатом является число -880. Сначала -889 преобразуется в абсолютное значение (889). Затем это значение округляется до двух значимых разрядов (880). После этого повторно применяется знак «минус», что дает в результате -880.
Округление в Excel в большую сторону при помощи функции ОКРУГЛВВЕРХ
Пользователь может самостоятельно задавать направление для округления. С помощью функции ОКРУГЛВВЕРХ можно убрать лишни цифры или осуществить округление целого числа до того, которое оказывается выше.
Пример использования этой формулы можно увидеть на этом скриншоте.
6
Основное отличие этой функции от ОКРУГЛ заключается в том, что всегда функция обеспечивает округление с избытком. Если имеются какие-либо разряды числа, округление осуществляется до определенного их количества.
Синтаксис функции ОКРУГЛВВЕРХ
В состав этой функции ходит два аргумента. В целом, функция выглядит следующим образом.
=ОКРУГЛВВЕРХ(76,9;0)
А теперь давайте более подробно разберемся, какие у нее аргументы.
Аргументы функции ОКРУГЛВВЕРХ
Синтаксис у этой функции, как видим, очень простой. Аргументы следующие:1. Число. Это какое-угодно число, для которого требуется округление.
- Число разрядов. Здесь записывается количество разрядов, которое должно остаться после того, как округление будет осуществлено.
Таким образом, по синтаксису эта формула ничем не отличается от ОКРУГЛ. От модальности числа зависит то, какие именно числа будут сокращаться. Если второй аргумент положительный, то округление оуществляется в правой части от запятой. Если же он отрицательный – то с левой.
Округление при работе с числами ограниченной точности
Реальные физические величины всегда измеряются с некоторой конечной точностью, которая зависит от приборов и методов измерения и оценивается максимальным относительным или абсолютным отклонением неизвестного истинного значения от измеренного, что в десятичном представлении значения соответствует либо определённому числу значащих цифр, либо определённой позиции в записи числа, все цифры после (правее) которой являются незначащими (лежат в пределах погрешности измерения). Сами измеренные параметры записываются с таким числом знаков, чтобы все цифры были надёжными, возможно, последняя — сомнительной. Погрешность при математических операциях с числами ограниченной точности сохраняется и изменяется по известным математическим законам, поэтому когда в дальнейших вычислениях возникают промежуточные значения и результаты с больши́м числом цифр, из этих цифр только часть являются значимыми. Остальные цифры, присутствуя в значениях, фактически не отражают никакой физической реальности и лишь отнимают время на вычисления. Вследствие этого промежуточные значения и результаты при вычислениях с ограниченной точностью округляют до того количества знаков, которое отражает реальную точность полученных значений. На практике обычно рекомендуется при длинных «цепочных» ручных вычислениях сохранять в промежуточных значениях на одну цифру больше. При использовании компьютера промежуточные округления в научно-технических приложениях чаще всего теряют смысл, и округляется только результат.
Так, например, если задана сила 5815 гс с точностью до грамма силы и длина плеча 1,40 м с точностью до сантиметра, то момент силы в кгс по формуле M=(mg)⋅h{\displaystyle M=(mg)\cdot h}, в случае формального расчёта со всеми знаками, окажется равным: 5,815 кгс • 1,4 м = 8,141 кгс•м. Однако если учесть погрешность измерения, то мы получим, что предельная относительная погрешность первого значения составляет 1/5815 ≈ 1,7•10−4, второго — 1/140 ≈ 7,1•10−3, относительная погрешность результата по правилу погрешности операции умножения (при умножении приближённых величин относительные погрешности складываются) составит 7,3•10−3, что соответствует максимальной абсолютной погрешности результата ±0,059 кгс•м! То есть в реальности, с учётом погрешности, результат может составлять от 8,082 до 8,200 кгс•м, таким образом, в рассчитанном значении 8,141 кгс•м полностью надёжной является только первая цифра, даже вторая — уже сомнительна! Корректным будет округление результата вычислений до первой сомнительной цифры, то есть до десятых: 8,1 кгс•м, или, при необходимости более точного указания рамок погрешности, представить его в виде, округлённом до одного-двух знаков после запятой с указанием погрешности: 8,14 ± 0,06 кгс•м.
Округление рассчитанного значения погрешности
Обычно в окончательном значении рассчитанной погрешности оставляют только первые одну-две значащие цифры. По одному из применяемых правил, если значение погрешности начинается с цифр 1 или 2(по другому правилу — 1, 2 или 3), то в нём сохраняют две значащих цифры, в остальных случаях — одну, например: 0,13; 0,26; 0,3; 0,8. То есть каждая декада возможных значений округляемой погрешности разделена на две части. Недостаток этого правила состоит в том, что относительная погрешность округления изменяется значительным скачком при переходе от числа 0,29 к числу 0,3. Для устранения этого предлагается каждую декаду возможных значений погрешности делить на три части с менее резким изменением шага округления. Тогда ряд разрешённых к употреблению округлённых значений погрешности получает вид:
- 0,10; 0,12; 0,14; 0,16; 0,18;
- 0,20; 0,25; 0,30; 0,35; 0,40; 0,45;
- 0,5; 0,6; 0,7; 0,8; 0,9; 1,0.
Однако при использовании такого правила последние цифры самого результата, оставляемые после округления, также должны соответствовать приведённому ряду.
Пересчёт значений физических величин
Пересчёт значения физической величины из одной системы единиц в другую должен производиться с сохранением точности исходного значения. Для этого исходное значение в одних единицах следует умножить (разделить) на переводной коэффициент, часто содержащий большое количество значащих цифр, и округлить полученный результат до количества значащих цифр, обеспечивающего точность исходного значения. Например, при пересчёте значения силы 96,3 тс в значение, выраженное в килоньютонах (кН), следует умножить исходное значение на переводной коэффициент 9,80665 (1 тс = 9,80665 кН). В результате получается значение 944,380395 кН, которое необходимо округлить до трёх значащих цифр. Вместо 96,3 тс получаем 944 кН.
Оператор WorksheetFunction.Round
Если вам необходимо общепринятое математическое округление, используйте встроенную функцию рабочего листа – WorksheetFunction.Round.
Скопируйте в модуль VBA процедуру с использованием WorksheetFunction.Round и запустите ее выполнение:
|
1 |
SubTest_2() Dima1 AsSingle,a2 AsSingle,a3 AsSingle,a4 AsSingle a1=WorksheetFunction.Round(1.5,) a2=WorksheetFunction.Round(2.5,) a3=WorksheetFunction.Round(3.5,) a4=WorksheetFunction.Round(4.5,) MsgBox»WorksheetFunction.Round(1.5, 0)=»&a1&vbNewLine&_ «WorksheetFunction.Round(2.5, 0)=»&a2&vbNewLine&_ «WorksheetFunction.Round(3.5, 0)=»&a3&vbNewLine&_ «WorksheetFunction.Round(4.5, 0)=»&a4 EndSub |
Результат будет следующий:

Получилось то, что мы и ожидали.
Проверим погрешность:
- Сумма исходных чисел: 1.5 + 2.5 + 3.5 +4.5 = 12
- Сумма округленных чисел: 2 + 3 + 4 + 5 = 14
Результат очевиден – в данном случае сумма округленных чисел на 2 единицы больше суммы исходных.
Исходя из этого результата, можно сделать вывод, что «банковское» округление с помощью оператора Round дает более точные результаты при массовых операциях с округленными числами. Но в повседневной жизни чаще встречается обычное математическое округление.
Выбирайте округление, которое вам больше подходит для решаемой задачи!
Округление чисел с плавающей запятой с помощью DoubleRounder
DoubleRounder — это утилита из библиотеки decimal4j. Она предоставляет быстрый метод округления double чисел до 18 знаков после запятой.
Последнюю версию библиотеки можно найти здесь. Чтобы подключить ее, добавьте зависимость в файл pom.xml:
<dependency>
<groupId>org.decimal4j</groupId>
<artifactId>decimal4j</artifactId>
<version>1.0.3</version>
</dependency>
Пример использования утилиты:
DoubleRounder.round(PI, 3);
Но DoubleRounder дает сбой в нескольких сценариях. Например:
System.out.println(DoubleRounder.round(256.025d, 2)); // OUTPUTS: 256.02 вместо ожидаемого 256.03
Способы записи числа
Представьте, что нам надо записать число 1 миллиард. Самый очевидный путь:
Но в реальной жизни мы обычно опускаем запись множества нулей, так как можно легко ошибиться. Укороченная запись может выглядеть как или для 7 миллиардов 300 миллионов. Такой принцип работает для всех больших чисел.
В JavaScript можно использовать букву , чтобы укоротить запись числа. Она добавляется к числу и заменяет указанное количество нулей:
Другими словами, производит операцию умножения числа на 1 с указанным количеством нулей.
Сейчас давайте запишем что-нибудь очень маленькое. К примеру, 1 микросекунду (одна миллионная секунды):
Записать микросекунду в укороченном виде нам поможет .
Если мы подсчитаем количество нулей , их будет 6. Естественно, верная запись .
Другими словами, отрицательное число после подразумевает деление на 1 с указанным количеством нулей:
Шестнадцатеричные числа широко используются в JavaScript для представления цветов, кодировки символов и многого другого. Естественно, есть короткий стиль записи: , после которого указывается число.
Например:
Не так часто используются двоичные и восьмеричные числа, но они также поддерживаются для двоичных и для восьмеричных:
Есть только 3 системы счисления с такой поддержкой. Для других систем счисления мы рекомендуем использовать функцию (рассмотрим позже в этой главе).
Round(Decimal, Int32)
Math.Round(d, decimals) rounds a decimal value to a specified number of fractional digits , and rounds midpoint values to the nearest even number.
Syntax
The syntax of Round(d, decimals) method is
Math.Round(Decimal d, Int32 decimals)
where
| Parameter | Description |
|---|---|
| d | The decimal number to be rounded. |
| decimals | The number of decimal places in the return value. |
Return Value
The method returns value.
Example 2 – Round(d, decimals)
In this example, we will take some decimal values and round them to specific number of decimal points using Math.Round() method.
C# Program
using System;
class Example {
static void Main(string[] args) {
Decimal d, result;
Int32 decimals;
d = 10.2563M;
decimals = 2;
result = Math.Round(d, decimals);
Console.WriteLine($"Round({d}, {decimals}) = {result}");
d = 10.63524M;
decimals = 1;
result = Math.Round(d, decimals);
Console.WriteLine($"Round({d}, {decimals}) = {result}");
d = 10.5M;
decimals = 0;
result = Math.Round(d, decimals);
Console.WriteLine($"Round({d}, {decimals}) = {result}");
}
}
Output
Round(10.2563, 2) = 10.26 Round(10.63524, 1) = 10.6 Round(10.5, 0) = 10
ОКРУГЛТ
Довольно полезная функция ОКРУГЛТ. С ее помощью можно добиться округления не только до нужного разряда (слева или справа от запятой), но и вообще до нужной точности (кратности). К примеру, нужно рассчитать заказ изделий в штуках, но так, чтобы он был равен целому количеству ящиков. Если в ящике 6 шт, то заказываемое количество должно быть кратно шести. Или другой пример. Нужно, чтобы расчетная цена заканчивалась либо на 00, либо на 50, то есть имела кратность 50 рублей. Функция ОКРУГЛТ легко решает такие задачи.
Очень, очень правильная функция. Позволяет избежать 3-х промежуточных расчетов (разделить на кратность, округлить до целого и снова умножить на кратность, как я сам делал, пока не узнал про эту формулу).
Привязка к диапазону
Иногда нужно получить значение х, которое должно находиться в пределах определенного диапазона. Например, нужно значение от 1 до 100, но мы получаем значение 123. Чтобы исправить это, можно использовать min() (возвращает наименьшее из чисел) и max (возвращает максимально допустимое число).
Использование:
var lowBound = 1; var highBound = 100; var numInput = 123; var clamped = Math.max(lowBound, Math.min(numInput, highBound)); console.log(clamped); > 100;
Можно создать функцию или расширение класса Number:
Number.prototype.clamp = function(min, max) {
return Math.min(Math.max(this, min), max);
};
Использование:
(numInput).clamp(lowBound, highBound);
Заключение
В этой статье я рассказывал в основном об округлении к меньшему по модулю, но есть . В некоторых случаях подходят именно они, и я оставлю читателю возможность изучить их и попробовать реализовать на Go. Но я надеюсь, что теперь вам стало понятно, как устроено округление в Go и как нужно тестировать реализации округления.
Думаю, команда Go приняла правильное решение, добавив функцию Round() в стандартную библиотеку. Без этого мы бы продолжали пользоваться различными некорректными реализациями.
Надеюсь, теперь вам стало ясно, что при работе с float есть много подводных камней, про которые порой забывают даже эксперты. Легко придумать или скопировать откуда-то однострочную реализацию, но сложно написать действительно корректную. Неудивительно, что корректно работающее округление появилось лишь в шестой мажорной версии Java (через 15 лет, прошедших с релиза Java 1.0 до выхода Java 7), и я рад, что Go прошёл этот путь быстрее.