【问题标题】:Java Cannot read field "scale" because "multiplicand" is nullJava无法读取字段“scale”,因为“multiplicand”为空
【发布时间】:2021-11-26 13:59:39
【问题描述】:

出现错误:java.lang.NullPointerException: Cannot read field "scale" because "multiplicand" is null。如何避免这个错误?

BigDecimal price =  tariffs.stream() //
        .map(tariff -> tariff.getPrice()) //
        .reduce(BigDecimal.ZERO, BigDecimal::add);

BigDecimal productPrice = price.multiply(q).setScale(2, RoundingMode.HALF_UP);

【问题讨论】:

    标签: java compiler-errors null-pointer


    【解决方案1】:

    qnull。就那么简单。使 q 不为空,此错误消失。请参阅this SO question 了解更多信息。例如,可能通过将其初始化为BigDecimal.ONE

    注意:请注意,使用 int 和 long 作为货币而不是 BigDecimal 通常更容易,而且更好。将货币的原子单位存储在其中:$12.34 变为1234。每种货币都有这个概念,甚至比特币(satoshis)。您不能要求银行转帐 0.5 美分,因此您可以将 0.5 美分存储在 BigDecimal 中这一事实实际上并没有那么有用。 BigDecimal 也不是“但它可以处理所有情况”的东西;毕竟,给定 4 美分,您也不可能将其平均分配给 3 个人而不会出现错误。即使使用 BigDecimal。

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2021-04-20
      • 2014-07-31
      • 2020-03-24
      • 2022-11-24
      • 2022-12-05
      相关资源
      最近更新 更多