Я полностью согласен с вопросами корректности числа с плавающей запятой и десятичной дроби, упомянутыми выше, но
Многие финансовые приложения являются критичными для производительности.
В таких случаях вы рассмотрите возможность использования числа с плавающей запятой / double, поскольку десятичное число оказывает большое влияние на производительность в системах, где десятичные типы не поддерживаются в аппаратном обеспечении. И все же можно обернуть типы с плавающей запятой в классы более высокого уровня (например, Налог, Комиссия, Баланс, Дивиденд, Цитата, Тик и т. Д.), Которые представляют модель предметной области и инкапсулируют всю логику округления, а также допустимые операторы этих типов. и их взаимодействия.
И да - в некоторых проектах я реализовал пользовательские функции округления, позволяющие получить на 20% больше вычислений по сравнению с методами .NET или win32.
Еще одна вещь, которую стоит рассмотреть, - передаете ли вы свои объекты вне процесса, так как сериализация десятичных чисел, которые обычно составляют 4 целых числа, и передача их по проводам намного более интенсивно использует процессор (особенно если не поддерживается) и приводит к значительному увеличению пропускной способности и увеличению объем памяти.