小数精度问题 |大十进制

Decimal Precision Issue | Big Decimal

1.

    BigDecimal ap = new BigDecimal(170.8999999999998,   MathContext.DECIMAL64).setScale(2, BigDecimal.ROUND_FLOOR);

结果:170.89(要求:170.89)

2.

    BigDecimal ap = new BigDecimal(170.89999999999998, MathContext.DECIMAL64).setScale(2, BigDecimal.ROUND_FLOOR); (1 Extra 9 in value)

结果:170.90(要求:170.89)

3.

    BigDecimal ap = new BigDecimal(2401.99).setScale(2, BigDecimal.ROUND_FLOOR);

结果:2401.98(要求:2401.99)

如何在不四舍五入的情况下只得到小数点后 2 位数字。

P.S : 我不想将值转换为字符串。

2401.99double 文字 ,实际值略低于它。

改用 String 中的 BigDecimal 构造函数。