Подтвердить что ты не робот

Тип данных денег для .NET?

Ищите хороший Тип данных Money для .NET, который поддерживает валюты и курсы обмена (с соответствующим поведением и операциями).

  • Примечание. Я начал искать исходный код, который был напечатан в книге Разработка, основанная на тестах, по примеру автора Кент Бек - он разрабатывает хорошая денежная концепция. Не удалось найти полный источник в Интернете. Книга не содержит одного единственного листинга - вместо этого он разрабатывает исходный код в течение продолжительности книги.

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

Изменить 1: Уточнения

В разделе "Деньги" я имею в виду тип данных .NET, который я могу использовать для поддержки денег и его операций, в комплекте с валютной поддержкой и расчетами обменного курса. Что-то вроде этого является абстракцией более высокого уровня и может внутренне использовать примитивный тип данных. Также он может рассчитывать на набор классов, таких как: Money, ExchangeRate, Bank и т.д.

Это может быть тип значения (т.е. структура) или ссылочный тип (т.е. класс), но в любом случае он будет полным и поддерживает вышеупомянутые функции.

Изменить 2: Цели типа данных денег

(Это также показывает, почему необработанный десятичный, int или другой примитивный тип не будет достаточным для всех потребностей в деньгах)

Цели типа данных Money:

  • Функции безопасности (т.е. предотвращают арифметику для разных типов валют).
  • Сохраните тип валюты со значением (например, AUD, US, DKK).
  • Сохраняйте данные форматирования (например, десятичная группировка, символы валюты и т.д.).
  • Поставщики конверсий (например, обменный курс), чтобы помочь завершить решение.
  • Уменьшение нескольких валют в выражении для достижения результата.

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

4b9b3361

Ответ 1

Маркус Фаулер рассматривает деньги как частный случай "Количество", во-вторых, он считает, что правильным типом данных для денег должен быть Большой Integer. И у него есть точка.

Образец количества и денег Мартина Фаулера

Ответ 2

Тип данных денег @Проект кода

http://www.codeproject.com/KB/vb/moneyDatatype.aspx

Автор утверждает аналогичную проблему:

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

и выполняет цели

мои основные цели стали

  • Сохраните тип валюты со значением (например, AUD, US, DKK).
  • Сохраняйте данные форматирования (например, десятичная группировка, символы валюты, и др.).
  • Поставщики конверсий, я не хотел жестко кодировать это, поскольку это тип данных а не решение.
  • Функции безопасности разработки (т.е. предотвращают арифметику для разных типы валют).

Пока это самый близкий код .NET к тому, что я ищу. Он удовлетворяет большинству требований Money.

Если у кого-то есть что-то лучшее, это будет очень признательно.

Ответ 3

NodaMoney предоставляет библиотеку, которая рассматривает деньги как гражданина первого класса в .NET и обрабатывает все уродливые биты, такие как валюты и форматирование.

Он соответствует валютам в ISO 4217. И это .NET-аналог java-библиотеки JodaMoney.

Ответ 4

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

Ответ 5

Если вы ищете шаблоны, вы можете проверить Joda Money. Это Java, но вы должны дать вам некоторые идеи по API. Реализация С# была бы намного менее сложной из-за перегрузки оператора.

Ответ 6

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

Ответ 7

Посмотрите здесь:

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

Таким образом, выдается коэффициент конвертации фунта стерлингов в евро.

Ответ 8

Я понимаю ваши замечания о пользе наличия абстракции над деньгами здесь. Однако мое мнение о деньгах и его "операциях" довольно размыто. Для других вещей, таких как File, мне ясно, что должны быть операции Open, Read, Write, Close. Но для денег я не могу думать о многом кроме основных математических операций (+, -, *,/)

Один из С++ количественных финансов lib, который я знаю, содержит эту абстракцию денег (http://quantlib.org/reference/class_quant_lib_1_1_money.html.) Но вы можете ясно видеть, что это очень тонкая обертка, обеспечивающая основные перегрузки оператора и преобразование единиц измерения над десятичным.

В большинстве случаев я думаю, что десятичное число может выполнить ваше требование. Если есть определенная денежная операция, которую вам нужно поддерживать, я думаю, что все в порядке, чтобы развернуть свои собственные классы.