Я составляю некоторые основные типы приложений, которые будут иметь дело с деньгами. Простой денежный класс может выглядеть следующим образом:Округление денег в финансовой заявке
public class Money
{
private decimal RawAmount { get; set; }
public Currency Currency { get; set; }
public decimal Amount
{
get
{
return Math.Round(RawAmount, 2);
}
set
{
RawAmount = value;
}
}
}
Первоначально я думал, что это казалось хорошей идеей, пока я не должен составлять более сложные значения на основе нескольких Money.Amounts.
Проблема заключается в том, что количество каждого экземпляра Money
будет округлено и поэтому может отключить нечетное значение.
Итак, мой вопрос в том, что такое рекомендуемый способ работы с деньгами, где вы ожидаете округленного вывода?
Конкретно я интересно:
Есть ли способ, чтобы избежать необходимости округлить все свои значения в интерфейсе они отображаются его, я мог сделать это лучше с помощью какого-то форматировочного класса возможна?
Если я работаю со сложными вычислениями, то каков наилучший способ генерации тестовых значений. Например. Если я использую
decimal
для своего свойстваAmount
и хочу протестировать результат 10/3, как бы вы порекомендовали проверить результат, просто не перефразируя расчет?Сопротивление каждого композита
Amount
- это путь? и просто принять неточность? Кто-нибудь есть опыт работы приложений, связанные с финансовыми (обратите внимание, что это не является серьезным банковским приложение или что-нибудь так, возможно, фракции пенсов не могут быть слишком много проблем.)
Любого вклад высоко оценило.
Помните, что десятичная сумма использует округление банкиров. – garryp
Выставляем закругленное и неокрашенное значение. Когда раунд и когда не может быть деталью реализации этого класса. Его в ответственности пользователей классов. – Ralf
Вы не можете обойти деньги. Деньги всегда должны куда-то идти. Предполагаю, вы видели открытые сцены Супермена II? – Bathsheba