Money data type for .NET?

时光总嘲笑我的痴心妄想 提交于 2019-12-02 16:36:49
waheed

Martin Fowler considers money as a special case of "Quantity", secondly he thinks the right Data Type for money should be the Big Integer. And he does have a point.

Quantity and Money Pattern by Martin Fowler

Money Data Type @ The Code Project

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

Author states similar problem:

as part of a recent application I realized how lacking .NET is for currency support, don't get me wrong, there are many "pieces" but the glue for all items is missing, so this article is a response to that.

and fulfills objectives

my main objectives became

  • Store the currency type with the value (i.e. AUD, US, DKK).
  • Store formatting details (i.e. decimal grouping, currency symbols, etc.).
  • Conversion providers, I didn't want to hard code this as it is a datatype and not a solution.
  • Development safety features (i.e. prevent arithmetic on different currency types).

So far this the closest .NET code to what I'm searching for. It fulfills most requirements of Money.

If anybody has something better it would be much appreciated.

NodaMoney provides a library that treats Money as a first class citizen in .NET and handles all the ugly bits like currencies and formatting.

It complies with the currencies in ISO 4217. And it's the .NET counterpart of the java library JodaMoney.

you will probably find that creating your own class will result in the best solution.

If you are looking for patterns, you could check out Joda Money. It is Java, but should give you some ideas on an API. A C# implementation would be much less verbose due to operator overloading.

Daniel Gonzalez

I am the author of NMoneys which I think it might come handly. It has not been "officially released" yet, but it will change very little until it does.

Have a look here:

http://blogs.msdn.com/lucabol/archive/2008/12/04/financial-functions-for-net-released.aspx

It provides a .NET library replicating all the excel financial functions.

Doing currency conversion is tricky, because obviously it changes continously, so hardcoded values will be more or less useless. However, you may be able to use a web service to access up-to-date exchange rates. This one looks like a good start. Even better, a REST-style interface to the same converter:

http://www.webservicex.com/CurrencyConvertor.asmx/ConversionRate?FromCurrency=GBP&ToCurrency=EUR

So that outputs the conversion rate of pounds sterling to euros.

I do understand your points about the benefit of having abstraction layer over money here. However, my view on money and its "operations" is quite blurry. For other things like File, it's clear to me there should be Open, Read, Write, Close operations. But for Money, I can't think of much other than basic math operations (+,-,*,/)

One of C++ quantitative finance lib I know does contain this Money abstraction (http://quantlib.org/reference/class_quant_lib_1_1_money.html.) But you can clearly see that this is a very thin wrapper which provide basic operator overloads and unit conversion over Decimal.

In most cases, I think decimal can fulfill your requirement. If there is specific Money operation you need to support, I think it's okay to roll out your own classes.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!