Округление внутрисервисных денежных сумм

Задам вопрос на наглядном примере.

Есть веб-сервис, в котором есть две стороны участников. Одна сторона платит другой ежесуточно N рублей внутрисервисной валютой, эквивалентной российскому рублю. Единица рубля, в жизни, имеет значения вплоть до 0,1 рубля (т.е. одна копейка).

Система же предусматривает выплаты в % соотношении от конкретной суммы (реферальная система выплат от дохода привлеченного в систему участника) и эта сумма, из-за процентного соотношения от другой суммы, зачастую имеет значение в 1,333333… рубля.

Вопрос: каким образом в системе правильнее округлять цифровые значения денежных средств или до какого порядка стоит вести их учет и округление?
  • Вопрос задан
  • 3988 просмотров
Решения вопроса 1
rechik
@rechik
Можно использовать банковское округление.

Такой метод округления представляет собой несколько «модернизированный» вариант математического округления. Все числа, у которых «отбрасываемая» цифра не равна 5, округляются по правилам математического метода. А другие по следующему правилу:
– если цифра, которая стоит перед цифрой 5, четная, то округление осуществляется в меньшую сторону;
– если цифра, которая стоит перед цифрой 5, нечетная, то округление осуществляется в большую сторону.
Как отмечает Википедия, при использовании данного метода «исчезает систематическая ошибка округления при суммировании большого количества чисел».
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
serso
@serso
Это зависит. Вот, например, в случае 1.3333(3) — что захочет получить участник — 1.34 или 1.33?
В случае некоего распределения, например, процентного можно хранить базовое значение и % (понятно, что базовое значение будет нормализованным потому что это деньги) и при расчёте округлять до сколь угодного знака. Когда же совершается платёж по факту выплачивается некоторая сумма и она тоже уже нормализованная (т.к. это реальные деньги), поэтому здесь тоже не возникает проблемы с округлением.
До какого знака хранить? Зависит от валюты, для рубля достаточно два знака после запятой (но нормализованные!!!)
Ответ написан
Комментировать
@sergei-grigorev
Работал когда-то с банковским софтом, там числа хранились в формате 18,5 вроде бы, если не изменяет память (либо 21.9, не помню точно). Это позволяло не терять даже 1 копейку при подсчете денежных сумм, которые образовывались несколькими сотнями операций. При выдаче средств, округление суммы для выдачи было в меньшую сторону, но не выданная сумма в 0.00XXX всегда оставалась на счету
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы