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
,我很清楚应该有Open
, Read
, Write
, Close
操作。 但对于金钱来说,除了基本的math运算(+, – ,*,/)之外,
其中一个C ++定量金融库我知道确实包含这个钱抽象( http://quantlib.org/reference/class_quant_lib_1_1_money.html); 。但是你可以清楚地看到,这是一个非常薄的包装,它提供了基本的操作符重载和单位转换小数。
在大多数情况下,我认为小数可以满足您的要求。 如果您需要支持具体的Money操作,我认为可以推出自己的课程。