代码之家  ›  专栏  ›  技术社区  ›  John K

.NET的货币数据类型?

  •  34
  • John K  · 技术社区  · 6 年前

    寻找一个好的 货币数据类型 对于支持 货币 汇率 (与相关行为和操作相关)。

    • 注: 我开始寻找书中打印的源代码 Test-Driven Development By Example 作者肯特贝克-他提出了一个不错的货币概念。找不到完整的联机源。这本书不包含一个单独的清单,而是在书的整个过程中开发源代码。

    虽然这本书没有深入,我也希望钱的课程支持不同的 成圆机构 因为全球金融机构的情况也不尽相同。

    编辑1: 澄清

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

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

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

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

    货币数据类型的目标是:

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

    注: 可以从外部源加载和使用不同的数据值(如汇率)。这个问题并不意味着任何动态的东西都被硬编码成了金钱的概念。

    8 回复  |  直到 15 年前
        1
  •  9
  •   facundofarias Ashay Batwal    9 年前

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

    Quantity and Money Pattern by Martin Fowler

        2
  •  5
  •   John K    15 年前

    货币数据类型@代码项目

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

    作者提出了类似的问题:

    作为最近申请的一部分 意识到.NET的不足 货币支持,别误会我, 有很多“碎片” 但是胶水 因为所有的东西都不见了 ,所以这个 文章就是对此的回应。

    实现目标

    我的主要目标是

    • 将货币类型与值(即AUD、US、DKK)一起存储。
    • 存储格式详细信息(即十进制分组、货币符号, 等等)。
    • 转换提供程序,我不想硬编码,因为它是一个数据类型 也不是解决办法。
    • 开发安全特性(即防止不同 货币类型)。

    到目前为止,这是最接近我正在搜索的.NET代码。它能满足大部分的资金需求。

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

        3
  •  4
  •   Mariano Desanze    9 年前

    NodaMoney 提供了一个库,它将钱视为.NET中的一等公民,并处理货币和格式等所有不好的方面。

    它符合ISO4217中的货币。它是java库JodaMoney的.NET对应项。

        4
  •  2
  •   user268005    15 年前

    您可能会发现创建自己的类将得到最佳解决方案。

        5
  •  2
  •   Eric Hauser    15 年前

    如果你在找花样,你可以去看看 Joda Money . 它是Java,但是应该给你一些关于API的想法。由于运算符重载,C实现的详细程度要低得多。

        6
  •  2
  •   Daniel Gonzalez    9 年前

    我是 NMoneys 我想这很容易。 它还没有“正式发布”,但在正式发布之前,它的变化很小。

        7
  •  1
  •   Alistair Evans    15 年前

    看看这里:

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

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

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

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

    这样就输出了英镑对欧元的换算率。

        8
  •  0
  •   Gant    15 年前

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

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

    在大多数情况下,我认为十进制可以满足你的要求。如果有具体的资金运作需要你支持,我想可以推出你自己的课程。