为.NET寻找支持货币和汇率的良好资金数据类型(以及相关行为和操作)。
尽管本书不深入,但我还希望Money课程能够支持不同的舍入机制,因为全球金融机构也有所不同。
修改1: 澄清
“Money class”我指的是一种.NET数据类型,我可以用它来支持货币及其运营,完成货币支持和汇率计算。类似的东西是更高级别的抽象,可能在内部使用原始数据类型。此外,它可能依赖于一组类,如:Money,ExchangeRate,Bank等。
它可能是值类型(即结构)或引用类型(即类),但无论哪种方式都是完整的并支持上述特征。
(这也说明了原始十进制,int或其他原始类型不足以满足所有资金需求的原因)
Money数据类型的目标是:
注意:可以从外部源加载和使用不同的数据值,如汇率。这个问题并没有推断任何动态是硬编码到Money的概念。
答案 0 :(得分:9)
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
等其他内容,我很清楚应该有Open
,Read
,Write
,Close
操作。但是对于Money来说,除了基本的数学运算(+, - ,*,/)
我知道的一个C ++定量财务库确实包含了这个Money抽象(http://quantlib.org/reference/class_quant_lib_1_1_money.html。)但是你可以清楚地看到这是一个非常薄的包装器,它提供基本的运算符重载和单位转换超过十进制。
在大多数情况下,我认为十进制可以满足您的要求。如果您需要支持特定的Money操作,我认为可以推出自己的类。