【问题标题】:How likely is BigDecimal to cause memory issues for a POS program?BigDecimal 导致 POS 程序内存问题的可能性有多大?
【发布时间】:2018-12-31 20:23:09
【问题描述】:

我了解 BigDecimal 是表示货币的最准确方式,因为将货币值视为浮点数据类型往往会导致舍入错误。但是,我也了解 BigDecimal 计算需要更多内存。也就是说,使用 BigDecimal 而不是 float 或 double 真的是处理货币价值的程序的最佳实践吗?如果我编写了一个程序,为餐厅的每份订单打印一份明细收据,如果我使用 BigDecimal,我是否更有可能耗尽内存,或者如果我使用浮点值,则更有可能出现舍入错误?

(注意:“如何处理 Java BigDecimal 性能?”是一个稍微类似的问题,但我更关心相对简单的快餐交易风险最小的选择。)

【问题讨论】:

  • 假设您在一台未满 35 岁的计算机上运行该程序,使用 BigDecimal 不会耗尽我的内存。在使用 floatdouble 时,您更有可能失去精度而不是内存不足。
  • 不,表示货币的最准确方法是使用第三方库(如 Joda Money)或创建适合您特定需求的自己的货币类。在我看来,在内部使用整数将美元表示为美分,将第纳尔表示为 darahim 似乎是解决此问题的最佳方式。

标签: java floating-point double currency bigdecimal


【解决方案1】:

除非您的程序一次处理数百万个 BigDecimal,否则您不会真正注意到内存消耗的差异。

如果您确实运行具有如此吞吐量的服务,您肯定可以购买额外的千兆字节 RAM,而不是因计算不正确而陷入诉讼;-)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2018-08-07
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多