【发布时间】:2018-12-31 20:23:09
【问题描述】:
我了解 BigDecimal 是表示货币的最准确方式,因为将货币值视为浮点数据类型往往会导致舍入错误。但是,我也了解 BigDecimal 计算需要更多内存。也就是说,使用 BigDecimal 而不是 float 或 double 真的是处理货币价值的程序的最佳实践吗?如果我编写了一个程序,为餐厅的每份订单打印一份明细收据,如果我使用 BigDecimal,我是否更有可能耗尽内存,或者如果我使用浮点值,则更有可能出现舍入错误?
(注意:“如何处理 Java BigDecimal 性能?”是一个稍微类似的问题,但我更关心相对简单的快餐交易风险最小的选择。)
【问题讨论】:
-
假设您在一台未满 35 岁的计算机上运行该程序,使用
BigDecimal不会耗尽我的内存。在使用float或double时,您更有可能失去精度而不是内存不足。 -
不,表示货币的最准确方法是使用第三方库(如 Joda Money)或创建适合您特定需求的自己的货币类。在我看来,在内部使用整数将美元表示为美分,将第纳尔表示为 darahim 似乎是解决此问题的最佳方式。
标签: java floating-point double currency bigdecimal