【问题标题】:What are some ways to implement the Money Class in Java?有哪些方法可以在 Java 中实现 Money 类?
【发布时间】:2013-07-24 20:03:04
【问题描述】:

我可以使用 BigDecimal 类,因为它提供算术、比例操作、舍入、比较、散列和格式转换的操作。

我只是想知道还有什么其他方法可以实现它?

【问题讨论】:

  • 仅供参考:Java 9 将在 JDK 中包含一个 Money/Currency API。然而,这将是另外 3 年(至少!)直到它出来......

标签: java bigdecimal currency


【解决方案1】:

货币计算最好以整数进行,包括美分。

所以你的选择如下:

  1. 如果您 100% 确定您永远不需要表示大于 9,223,372,036,854,775,807 美分的数字,请选择多头。
  2. 如果您需要更大的东西,请使用 BigInteger。

编辑 - 正如@arshajii 在 cmets 中指出的那样,对于某些应用领域(主要是股票市场/期货),您计算美分,小数点后 5 位以上。如果那是您的预期应用程序,那么您将不得不使用 BigInteger 的可能性更大。

【讨论】:

  • 数美分并不总是足够好。例如,货币换算可能会产生几分之一的美分,因此必须经常跟踪这一点。
  • @arshajii - 在现实生活中,它在很大程度上取决于应用程序。对于大多数股票/期货应用程序,您使用 5 个十进制数字,也许更多。对于零售代码(购物)和个人资金跟踪,您倾向于四舍五入。
【解决方案2】:

我建议使用Joda Money 项目中的类。它是由 Joda Time 成名的 Stephen Colebourne 开发的。

它提供了有用的类来表示金额,从字符串解析和格式化它们,以及许多其他相关的实用方法。

【讨论】:

    【解决方案3】:

    int?由于浮点舍入问题,请确保您从不使用浮点数或双精度数等。

    //$100.52
    int value = 10052;
    
    int wholeDollars = value/100;
    int cents = value %100;
    

    【讨论】:

    • int 这里有点紧。 40 亿美分约为 4000 万美元,任何严重的金钱相关程序都可能遇到,然后溢出。在 64 位硬件上(现在几乎是任何东西),int 和 long 的成本实际上是相同的,而且 long 可以获得更多的喘息空间
    猜你喜欢
    • 1970-01-01
    • 2011-09-14
    • 2012-06-14
    • 2016-01-20
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多