我做以下

    MathContext context = new MathContext(7, RoundingMode.HALF_UP);
    BigDecimal roundedValue = new BigDecimal(value, context);

    // Limit decimal places
    try {
        roundedValue = roundedValue.setScale(decimalPlaces, RoundingMode.HALF_UP);
    } catch (NegativeArraySizeException e) {
        throw new IllegalArgumentException("Invalid count of decimal places.");
    }
    roundedValue = roundedValue.stripTrailingZeros();

    String returnValue = roundedValue.toPlainString();

如果输入现在是“-0.000987654321”(=值),我会返回“-0.001”(=返回值),这是可以的。

如果输入现在是“-0.0000987654321”,我会返回“-0.0001”,这也是可以的。

但是,当输入现在是“-0.00000987654321”时,我会得到“0.0000”而不是“0”,这是不正确的。这是怎么了为什么在这种情况下不删除尾随零?

最佳答案

BigDecimal d = new BigDecimal("0.0000");
System.out.println(d.stripTrailingZeros());

使用Java 7打印0.0000,但是使用Java 8打印0。这显然是bug,在Java 8中一直是fixed

09-30 17:58