Вопрос

Мне интересно существование каких-либо «округлых» стандартов «, когда речь идет о расчете финансовых данных. Мои первоначальные мысли должны выполнять округление только тогда, когда данные представлены пользователю (слой презентации).

Если «закругленные» данные затем используются для дальнейших расчетов, должны использоваться «округлый» фигура или «сырая» фигура? У кого-нибудь есть совет?

Обратите внимание, что я знаю разные методы округления, то есть закругления банкиров и т. Д.

Это было полезно?

Решение

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

Когда именно округление должно быть выполнено, могут быть выполнены правилами, такими как преобразование между Евро и национальные валюты Это заменено.

Если таких правил нет, я бы сделал все расчеты с высокой точностью, а также раунд только для презентации, то есть не использовать округлые значения для дальнейших расчетов. Это должно дать лучшую общую точность.

Другие советы

Я только что спросил программисту с Greybeard Mainframe в компании «Финансовое программное обеспечение», которую я работаю, и он сказал, что нет известного стандарта, и это до практики программиста.

Хотя статистики знали о проблеме округления с не менее 1906 года, трудно найти финансовый стандарт, одобряющий его.

Согласно с Это сидитЕ, «Сообщение Европейской комиссии Внедрение евро и округление валютных сумм предполагает, что ранее не было стандартного подхода к округлянию в банке. "

В целом, используйте симметричный режим округления независимо от того, в какой базе вы работаете (Base-2 или Base-10).

Это позволит избежать систематической смещения во время расчетов.

Такой режим круглый половина к чему, иначе известно как «округление банкиров».

Используйте языковые инструменты, которые позволяют указать топлее цифровую контекст, включая режимы округления и усечения. Например, Python's decimal модуль. Неявные допущения, сделанные библиотекой C, могут не подходить для ваших вычислений.

http://en.wikipedia.org/wiki/rounding#Rounding_to_integer.

Я не видел существование «одного стандарта, чтобы управлять им все» - есть любое количество правил округления (как вы ссылались), и они, кажется, вступают в игру на основе индустрии / клиента / и кода валюты (http://en.wikipedia.org/wiki/iso_4217.) - Поскольку не все используют 2 места после десятичного времени, проблема становится еще более сложной. В конце дня ваш клиент должен указать правила, которые они хотят реализовать ...

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

Хотя уровень базовой оплаты вполне может быть указан только в двух десятичных местах («вы наняты на уровне 22,71 доллара в час»), такие вещи, как смешанные сверхурочные (определены путем усреднения многочисленных скоростей оплаты в течение периода), в конечном итоге вступают в силу $ 23.37183475 / ч.

Как вы платите сверхурочно на это?

15 hours x 23.37183475 x 1.5 = $525.87 rounded from $525.86628187
15 hours x 23.37       x 1.5 = $525.82

Почему вы украли пять центов от моего клиента? К сожалению, я не шучу об этом.

Это становится еще более неудобным, когда вы рассчитываете при полной точности точности, но отобразите усеченную версию: вы выполняете первый расчет выше, но только отображение $ 23,37 на скорость на расчету.

Теперь расчеты Pay Shub не завязывают к Пенни, и теперь вы должны объяснить это, но даже если это в пользу работника, это может быть достаточно для трудового адвоката пахнуть кровью в воде и начать искать других вещи.

Один из подходов - всегда раунд в пользу работника, а не в естественном направлении, поэтому не может быть обвинение в краже систематической заработной платы.

Рассмотрим использование масштабированных целых чисел.

Другими словами, храните целые числа копейки вместо дробных чисел долларов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top