Открыть главное меню

TS.ABCP.bank-round: различия между версиями

Строка 59: Строка 59:
 
|-
 
|-
 
|100.025
 
|100.025
|100.02
+
|100.03
 
|100.02
 
|100.02
 
|-
 
|-

Версия 10:06, 9 ноября 2022

Банковское округление

Описание

При вычислении значений с помощью деления (например, НДС) получаются копейки, которые при последующем суммировании и округлении дают интересный эффект - сумма НДС по нескольким позициям может не равняться суммарному значению НДС, рассчитанному на основе общей суммы.

Для борьбы с этой проблемой применяется «банковское округление». Так же оно известно под следующими наименованиями: гауссово округление, бухгалтерское округление.

Этот способ очень похож на математическое округление, за исключением следующего момента: если за последней значащей цифрой стоит 5, то последнюю цифру увеличивают, если она нечётная, и не изменяют, если чётная.

Такой подход не снимает проблему округления полностью, а только значительно сокращает вероятность накопления ошибки за счет того, что количество «четных» и «нечетных» сумм статистически примерно одинаково. На практике такой точности вполне достаточно.

Этот алгоритм часто используется при расчетах в бухгалтерских системах - 1С, Комтет.


Алгоритм
  • если тысячные доли рубля меньше 5, то тысячные просто отбрасываются;
  • если тысячные доли рубля равны 5, а количество сотых четное, то тысячные просто отбрасываются;
  • в остальных случаях округляем вверх до сотых.


Примеры округления
точное число арифметическое

округление

банковское

округление

100.004 100 100
100.005 100.01 100
100.006 100.01 100.01
100.014 100.01 100.01
100.015 100.02 100.02
100.016 100.02 100.02
100.024 100.02 100.02
100.025 100.03 100.02
100.026 100.03 100.03


Пример реализации

Пример реализации на php, на js