代码之家  ›  专栏  ›  技术社区  ›  user1884155

如果不计算货币金额,是否需要BigDecimal?

  •  2
  • user1884155  · 技术社区  · 8 年前

    我有一个Java程序,可以从数据库中读取数据,并将其显示在用户界面上。其中一种数据类型是货币金额,因此它会自动触发我使用BigDecimal作为 explained here 。但是在我的情况下,除了

    1. 在UI上呈现它。
    2. 给它另一个应用程序(通过http),该应用程序可以将其写入另一个数据库。

    考虑到数据库中的数据类型类似于double,我认为将双精度数据库字段转换为bigdecime没有任何好处,因为它只是转换为字符串(对于UI或webservice)。

    我错过什么了吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Karol Dowbecki    8 年前

    无需使用 BigDecimal 但是,对于货币值,您必须确保准确存储金额,而不会在 float double 数据类型。

    实现这一点的方法很少:

    1. Java 9附带JSR 354:货币和货币API类,例如。 MonetaryAmount
    2. 将金额存储为 long 使用最小的有意义的货币单位,例如美元是美分。注意,因为有些货币不使用分数单位,例如日元。
    3. 提及 BigDecimal
    4. 将金额存储为 String 如果您不需要任何处理。这是一种丑陋的方法,但如果只传递数量,它可能会执行一些操作,例如从XML读取数据并使用REST API进行公开。