报告对接受 double 值的 BigDecimal 构造函数的调用。 这些构造函数生成的 BigDecimal 与提供的 double 值相等。 但是,由于 double 是以 IEEE 754 64 位双精度二进制浮点格式进行编码,确切值可能出乎意料。

例如,new BigDecimal(0.1) 会产生一个 BigDecimal 对象,值为 0.1000000000000000055511151231257827021181583404541015625,这是以 double 表示最接近 0.1 的数字。 要获得包含期望值 0.1BigDecimal,请使用 new BigDecimal("0.1")BigDecimal.valueOf(0.1)

示例:


  class Constructor {
    void foo() {
      new BigDecimal(0.1);
    }
  }

在应用快速修复后:


  class Constructor {
    void foo() {
      new BigDecimal("0.1");
    }
  }