Поиск хорошего Типа данных money для.NET, которая поддерживает валюты и обменные курсы (со связанным поведением и операциями).
Хотя книга не идет глубже, я также хотел бы, чтобы Денежный класс поддерживал различные механизмы округления, потому что это также варьируется среди финансовых учреждений во всем мире.
Редактирование 1: разъяснения
"Денежным классом" я имею в виду тип данных.NET, который я могу использовать для поддержки денег и его операций, вместе с поддержкой валюты и вычислениями обменного курса. Что-то как этот - высокоуровневая абстракция и могло бы внутренне использовать примитивный тип данных. Также это могло бы полагаться на пакет классов как: Деньги, ExchangeRate, Банк, и т.д.
Это мог бы быть тип значения (т.е. структура) или ссылочный тип (т.е. класс), но так или иначе это будет завершено и поддерживать вышеупомянутые функции.
(Это также показывает, почему необработанное десятичное число, интервал или другой тип примитива не будут достаточны для всех Денежных потребностей),
Цели Типа данных money были бы:
Примечание: Переменные значения данных как обменные курсы могут загружаться из внешнего источника и использоваться. Этот вопрос не выводит ничего динамического, трудно кодируется в понятие Денег.
Посмотрите здесь:
http://blogs.msdn.com/lucabol/archive/2008/12/04/financial-functions-for-net-released.aspx
Она предоставляет .NET библиотеку, воспроизводящую все финансовые функции excel.
Выполнение конвертации валют - сложная задача, так как очевидно, что она постоянно меняется, поэтому жестко закодированные значения будут более или менее бесполезны. Тем не менее, вы можете воспользоваться веб-сервисом для доступа к актуальным обменным курсам. Эта выглядит неплохим началом. Еще лучше, интерфейс в стиле REST к тому же конвертеру:
http://www.webservicex.com/CurrencyConvertor.asmx/ConversionRate?FromCurrency=GBP&ToCurrency=EUR
Так что выводит обменный курс фунта стерлингов к евро.
вы, вероятно, обнаружите, что создание собственного класса приведет к наилучшему решению.
Тип данных о деньгах @ The Code Project
http://www.codeproject.com/KB/vb/moneyDatatype.aspx
Автор заявляет об аналогичной проблеме:
в рамках недавней заявки I понял, насколько недостает .NET для валютная поддержка, не пойми меня неправильно, есть много "кусочков" , но клей для всех элементов отсутствует, так что это статья является ответом на это.
и выполняет цели
моими основными целями стали
- Хранить тип валюты со стоимостью (т.е. AUD, US, DKK).
- Хранить детали форматирования (т.е. десятичная группировка, валютные символы, и тому подобное).
- Провайдеры преобразования, я не хотел усложнять код, так как это тип данных. а не решение.
- Функции безопасности при разработке (т.е. предотвращение арифметики на различных типы валют).
Пока это самый близкий .NET код к тому, что я ищу. Он удовлетворяет большинству требований к Деньгам.
Если у кого-то есть что-то получше, он был бы очень признателен.
Мартин Фаулер рассматривает деньги как частный случай «количества», во-вторых, он считает, что правильным типом данных для денег должно быть большое целое число. И он прав.
Я понимаю вашу точку зрения о преимуществах уровня абстракции над деньгами. Однако мой взгляд на деньги и их «операции» довольно расплывчатый.Для других вещей, таких как File
, мне ясно, что должно быть Open
, Read
, Write
, Close
операции. Но что касается денег, я не могу придумать ничего, кроме основных математических операций (+, -, *, /)
Одна из известных мне библиотек количественного финансирования C ++ действительно содержит эту абстракцию Money ( http: // Quantlib .org / reference / class_quant_lib_1_1_money.html .) Но вы можете ясно видеть, что это очень тонкая оболочка, которая обеспечивает базовую перегрузку операторов и преобразование единиц измерения по сравнению с Decimal.
В большинстве случаев я думаю, что десятичная дробь может удовлетворить ваши требования. Если вам нужно поддерживать конкретную операцию Money, я думаю, что можно развернуть свои собственные классы.
Если вы ищете выкройки, посмотрите Joda Money . Это Java, но она должна дать вам некоторые идеи по API. Реализация C # будет намного менее подробной из-за перегрузки оператора.