Money的数据types为.NET?

寻找支持货币汇率 (与相关的行为和操作)的.NET的一个很好的Money数据types

  • 注: 我开始在作者Kent Beck的书“ Test-Driven Development By Example ”一书中查找打印出来的源代码,他开发了一个很好的货币概念。 无法在线find完整的源代码。 本书不包含一个单独的列表,而是在本书的整个过程中开发源代码。

虽然这本书没有深入,但我还希望Money类支持不同的四舍五入机制,因为全球各地的金融机构也不同。

编辑1:说明

“钱类”我的意思是一个.NET数据types,我可以用来支持货币和它的操作,完成货币支持和汇率计算。 类似这样的是更高层次的抽象,并可能在内部使用原始数据types。 也可以依靠一堆类,如:Money,ExchangeRate,Bank等

它可能是一个值types(即结构)或引用types(即类),但要​​么是完整的方式,并支持上述function。

编辑2:货币数据types的目标

(这也显示了为什么一个原始的十进制,整数或其他原始types不足以满足所有金钱的需要)

Money数据types的目标是:

  • 安全function(即防止不同货币types的算术)。
  • 存储货币types的价值(即澳元,美元,丹麦克郎)。
  • 存储格式细节(即小数分组,货币符号等)。
  • 转换提供商(例如汇率)帮助完善解决scheme。
  • 减lessexpression式中的多种货币以获得结果。

注意:可以从外部来源加载不同数据值(如汇率)并使用。 这个问题不能推断任何dynamic是硬编码到钱的概念。

马丁·福勒认为货币是“数量”的特例,其次他认为正确的数据types应该是大整数。 他确实有一个问题。

数量和货币模式Martin Fowler

货币数据types@代码项目

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

作者指出类似的问题:

作为最近的应用程序的一部分,我意识到如何缺乏.NET的货币支持,不要误解我的意思,有很多“件”, 但所有项目的胶水都缺less ,所以这篇文章是对此的回应。

并达到目标

我的主要目标变成了

  • 存储货币types的价值(即澳元,美元,丹麦克郎)。
  • 存储格式细节(即小数分组,货币符号等)。
  • 转换提供程序,我不想硬编码,因为它是一个数据types,而不是一个解决scheme。
  • 开发安全function(即防止不同货币types的算术)。

到目前为止,这是我正在寻找的最接近的.NET代码。 它符合Money的大部分要求。

如果有人有更好的东西,将不胜感激。

NodaMoney提供了一个库,将Money作为.NET的头等公民处理,并处理所有丑陋的比特,如货币和格式。

它符合ISO 4217中的货币。它是Java库JodaMoney的.NET对应物。

你可能会发现创build自己的class级将导致最好的解决scheme。

如果你正在寻找模式,你可以看看Joda Money 。 这是Java,但应该给你一些API的一些想法。 由于操作符重载,AC#实现将不那么冗长。

我是NMoneys的作者,我认为它可能会来得及手。 它还没有被“正式发布”,但它会改变很less。

看看这里:

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

它提供了一个.NET库复制所有的Excel财务function。

做货币转换是非常棘手的,因为显然它会不断变化,所以硬编码值将会或多或less地失去作用。 但是,您可以使用Web服务访问最新的汇率。 这看起来是一个好的开始。 更好的是,一个到同一个转换器的REST风格的接口:

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

因此,输出英镑到欧元的转换率。

我确实理解你对这里的抽象层相对于金钱的好处。 但是,我对货币及其“操作”的看法是相当模糊的。 对于其他的东西,如File ,我很清楚应该有OpenReadWriteClose操作。 但对于金钱来说,除了基本的math运算(+, – ,*,/)之外,

其中一个C ++定量金融库我知道确实包含这个钱抽象( http://quantlib.org/reference/class_quant_lib_1_1_money.html); 。但是你可以清楚地看到,这是一个非常薄的包装,它提供了基本的操作符重载和单位转换小数。

在大多数情况下,我认为小数可以满足您的要求。 如果您需要支持具体的Money操作,我认为可以推出自己的课程。