.NET的Money数据类型?

时间:2010-02-07 02:00:12

标签: .net currency financial

为.NET寻找支持货币汇率的良好资金数据类型(以及相关行为和操作)。

  • 注意:我开始在作者Kent Beck的书Test-Driven Development By Example中搜索印刷中看到的源代码 - 他开发了一个很好的货币概念。无法在线找到完整的来源。这本书不包含一个单一的列表 - 而是在本书的持续时间内开发源代码。

尽管本书不深入,但我还希望Money课程能够支持不同的舍入机制,因为全球金融机构也有所不同。

修改1: 澄清

“Money class”我指的是一种.NET数据类型,我可以用它来支持货币及其运营,完成货币支持和汇率计算。类似的东西是更高级别的抽象,可能在内部使用原始数据类型。此外,它可能依赖于一组类,如:Money,ExchangeRate,Bank等。

它可能是值类型(即结构)或引用类型(即类),但无论哪种方式都是完整的并支持上述特征。

编辑2:货币数据类型的目标

(这也说明了原始十进制,int或其他原始类型不足以满足所有资金需求的原因)

Money数据类型的目标是:

  • 安全功能(即防止不同货币类型的算术运算)。
  • 使用值(即AUD,US,DKK)存储货币类型。
  • 存储格式详细信息(即十进制分组,货币符号等)。
  • 转换提供商(例如汇率)以帮助完善解决方案。
  • 减少表达式中的多种货币以获得结果。

注意:可以从外部源加载和使用不同的数据值,如汇率。这个问题并没有推断任何动态是硬编码到Money的概念。

8 个答案:

答案 0 :(得分:9)

Martin Fowler认为金钱是“数量”的一个特例,其次他认为正确的数据类型应该是大整数。他确实有一点意见。

Quantity and Money Pattern by Martin Fowler

答案 1 :(得分:5)

资金数据类型@代码项目

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

作者陈述类似的问题:

  

作为最近申请的一部分我   意识到.NET缺乏的原因   货币支持,不要误会我的意思,   有许多“碎片”但胶水   因为缺少所有项目,所以这个   文章是对此的回应。

并实现目标

  

我的主要目标变成了

     
      
  • 使用值(即AUD,US,DKK)存储货币类型。
  •   
  • 存储格式详情(即十进制分组,货币符号,   等)。
  •   
  • 转换提供程序,我不想硬编码,因为它是一种数据类型   而不是解决方案。
  •   
  • 开发安全功能(即防止不同的算术运算)   货币类型)。
  •   

到目前为止,这是我正在搜索的最接近的.NET代码。它满足了Money的大多数要求。

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

答案 2 :(得分:4)

NodaMoney提供了一个库,它将Money视为.NET中的一等公民,并处理所有丑陋的部分,如货币和格式。

它符合ISO 4217中的货币。它是java库JodaMoney的.NET版本。

答案 3 :(得分:2)

您可能会发现创建自己的类会产生最佳解决方案。

答案 4 :(得分:2)

如果您正在寻找模式,可以查看Joda Money。它是Java,但应该给你一些关于API的想法。由于运算符重载,C#实现会更加冗长。

答案 5 :(得分:2)

我是NMoneys的作者,我认为它可能会得到帮助。 它还没有“正式发布”,但它会发生变化,直到它发生。

答案 6 :(得分:1)

看看这里:

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

它提供了一个复制所有excel财务函数的.NET库。

进行货币转换很棘手,因为它显然会不断变化,因此硬编码的值或多或少会无用。但是,您可以使用Web服务访问最新的汇率。 This一个看起来像个好的开始。更好的是,同一个转换器的REST风格接口:

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

这样就可以输出英镑到欧元的转换率。

答案 7 :(得分:0)

我理解你在这里有关于抽奖层的好处。但是,我对金钱及其“运作”的看法相当模糊。对于File等其他内容,我很清楚应该有OpenReadWriteClose操作。但是对于Money来说,除了基本的数学运算(+, - ,*,/)

之外我想不出什么

我知道的一个C ++定量财务库确实包含了这个Money抽象(http://quantlib.org/reference/class_quant_lib_1_1_money.html。)但是你可以清楚地看到这是一个非常薄的包装器,它提供基本的运算符重载和单位转换超过十进制。

在大多数情况下,我认为十进制可以满足您的要求。如果您需要支持特定的Money操作,我认为可以推出自己的类。