35

为 .NET寻找支持货币汇率(具有相关行为和操作)的良好Money 数据类型。

  • 注意:我开始在作者 Kent Beck 的“示例测试驱动开发”一书中搜索印刷版的源代码- 他开发了一个很好的货币概念。网上找不到完整的源码。这本书不包含一个单一的列表 - 相反,它在本书的整个过程中开发了源代码。

虽然这本书没有深入,但我也希望 Money 类支持不同的舍入机制,因为这在全球金融机构之间也有所不同。

编辑 1: 澄清

“Money 类”是指一种 .NET 数据类型,我可以使用它来支持货币及其操作,包括货币支持和汇率计算。类似的东西是更高级别的抽象,并且可能在内部使用原始数据类型。它还可能依赖于一系列类,例如:Money、ExchangeRate、Bank 等。

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

编辑 2:Money 数据类型的目标

(这也说明了为什么原始的小数、整数或其他原始类型不足以满足所有资金需求)

Money 数据类型的目标是:

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

注意:可以从外部源加载和使用汇率等不同的数据值。这个问题并没有推断出任何动态都被硬编码到货币的概念中。

4

8 回答 8

9

Martin Fowler 认为货币是“数量”的一个特例,其次他认为货币的正确数据类型应该是大整数。他确实有道理。

Martin Fowler 的数量和货币模式

于 2010-02-07T10:45:09.247 回答
6

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

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

于 2015-11-09T15:46:58.047 回答
5

金钱数据类型@代码项目

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

作者陈述了类似的问题:

作为最近的一个应用程序的一部分,我意识到 .NET 是多么缺乏货币支持,不要误会我的意思,有很多“部分” ,但所有项目的粘合剂都缺失了,所以这篇文章是对此的回应。

并实现目标

我的主要目标变成了

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

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

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

于 2010-02-07T04:46:11.833 回答
2

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

于 2010-02-07T04:11:46.680 回答
2

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

于 2010-02-07T04:53:35.537 回答
1

看看这里:

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

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

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

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

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

于 2010-02-07T02:16:49.077 回答
1

我是NMoneys的作者,我认为它可能会派上用场。它还没有“正式发布”,但在正式发布之前它几乎不会改变。

于 2010-10-20T12:46:55.320 回答
0

我确实理解你关于在这里拥有抽象层而不是金钱的好处的观点。然而,我对金钱及其“运作”的看法相当模糊。对于其他事情File,我很清楚应该有Open, Read, Write,Close操作。但是对于金钱,除了基本的数学运算(+、-、*、/)之外,我想不到太多

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

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

于 2010-02-07T04:47:48.797 回答