Стандарты округления - финансовые расчеты

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

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

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

4 ответа

Решение

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

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

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

Я только что спросил программиста мэйнфрейма от "серой бороды" в компании, специализирующейся на финансовом программном обеспечении, на которую я работаю, и он сказал, что нет общеизвестного стандарта, и дело до программиста.

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

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

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

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

Такой режим - Round-Half-To-Even, иначе известный как "округление банкиров".

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

http://en.wikipedia.org/wiki/Rounding

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

Хотя базовая ставка заработной платы может быть указана только в двух десятичных разрядах ("Вы наняты по 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 долл. США для ставки в платежной квитанции.

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

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

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

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

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

Другие вопросы по тегам