如果不对货币金额进行计算,是否需要 BigDecimal?
Is BigDecimal necessary if no calculations are done with the monetary amount?
我有一个 Java 程序可以从数据库中读取数据,并将其显示在用户界面上。其中一种数据类型是金额 - 因此它会自动触发我将 BigDecimal 用作 explained here 。但是在我的例子中,除了
之外,我不对这个字段做任何事情
- 在 UI 上渲染它。
- 给它另一个应用程序(通过 http),它可以将它写入另一个数据库。
考虑到数据库中的数据是类似于双精度的类型,我认为将双精度数据库字段转换为 BigDecimal 没有任何优势,因为它只是被转换为字符串(无论是 UI,或用于网络服务)。
我是不是漏掉了什么?
没有要求使用 BigDecimal
作为货币值,但是您必须确保金额的存储准确无误,没有 float
或 double
数据中通常会遇到的任何舍入或精度问题类型。
实现这个的方法很少:
- Java 9 附带 JSR 354:货币和货币 API 类 例如
MonetaryAmount
.
- 使用最小有意义的货币单位将金额存储为
long
,例如对于美元,它是美分。请注意,因为某些货币不使用小数单位,例如日元。
- 提到
BigDecimal
.
- 如果您不需要任何处理,请将金额存储为
String
。这是一种丑陋的方法,但如果你只是传递周围的数量,它可能会做,例如从 XML 读取并使用 REST API. 公开
我有一个 Java 程序可以从数据库中读取数据,并将其显示在用户界面上。其中一种数据类型是金额 - 因此它会自动触发我将 BigDecimal 用作 explained here 。但是在我的例子中,除了
之外,我不对这个字段做任何事情- 在 UI 上渲染它。
- 给它另一个应用程序(通过 http),它可以将它写入另一个数据库。
考虑到数据库中的数据是类似于双精度的类型,我认为将双精度数据库字段转换为 BigDecimal 没有任何优势,因为它只是被转换为字符串(无论是 UI,或用于网络服务)。
我是不是漏掉了什么?
没有要求使用 BigDecimal
作为货币值,但是您必须确保金额的存储准确无误,没有 float
或 double
数据中通常会遇到的任何舍入或精度问题类型。
实现这个的方法很少:
- Java 9 附带 JSR 354:货币和货币 API 类 例如
MonetaryAmount
. - 使用最小有意义的货币单位将金额存储为
long
,例如对于美元,它是美分。请注意,因为某些货币不使用小数单位,例如日元。 - 提到
BigDecimal
. - 如果您不需要任何处理,请将金额存储为
String
。这是一种丑陋的方法,但如果你只是传递周围的数量,它可能会做,例如从 XML 读取并使用 REST API. 公开