Ind*_*ial 5 currency currency-exchange-rates
在阅读了如何最好地正确处理多个时区中的用户之后,我了解到要走的路是将所有日期存储在规范化的、应用程序范围的时区中 -UTC然后应用规范化时区和个人用户之间的差异输出时的时区。今天我开始考虑将这种方法应用于软件中的货币处理是否合适:
所有存储的货币都转换为应用程序范围的货币,比如说EUR(€),并且在输出时,货币会转换回用户自己的货币,并使用当天更新的汇率?
这里有什么常识?这通常是如何解决的,在选择处理此问题的方法之前我应该注意什么?
一种标准方法是在持有和操纵货币价值时同时存储金额和货币。
\n\n请参阅Martin Fowler 的《企业应用程序架构模式》中的货币模式。
\n\nFowler 描述了定义一个简单的数据类型来保存两个原始组件,并使用重载的算术运算符来执行货币运算:
\n\n\n\n“基本思想是建立一个 Money 类,其中 \xef\xac\x81 字段用于表示数字\n 金额和货币。您可以将金额存储为 \n 整数类型或 \xef\xac\x81xed 十进制类型。小数类型对于某些操作来说更容易,而积分对于其他操作来说更容易。您绝对应该避免任何类型的 xefxacx82 浮动点类型,因为这会引入 Money 想要解决的舍入问题避免。大多数时候\n人们希望货币值四舍五入到最小的完整单位,\n例如美元的美分。但是,有时需要小数\n单位。\xe2\x80\x99很重要明确您\xe2\x80\x99 使用的是哪种货币,尤其是在使用这两种货币的应用程序中。对于这两种情况使用不同的类型是有意义的,因为\n 它们在算术运算下的表现截然不同。
\n\n货币需要算术运算,以便您可以像使用数字一样轻松地使用货币对象。但货币算术运算与数字货币运算有一些重要的区别。最明显的是,任何加法或减法都需要了解货币,因此如果您尝试将不同货币的金额加在一起,您可以做出反应。最简单、最常见的反应是将不同货币的相加视为错误。在一些更复杂的情况下,您可以使用 Ward Cunningham\xe2\x80\x99 的钱袋想法。这是一个在一个对象中包含多种货币的对象。然后,该对象可以像任何货币对象一样参与计算。它也可以被估价为货币。”
\n
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |