当结果返回零时,是否有任何方法可以截断负号;使用十进制格式时?

DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);
formattedValue = df.format("-0.023");

上面的代码返回-0.0。有什么办法可以使它只返回0.0?但是,当结果为负数时,我想保留负号。

最佳答案

我不认为仅使用DecimalFormat就可以做到这一点,但是这种单线解决了这个问题:

formattedValue = formattedValue.replaceAll( "^-(?=0(\\.0*)?$)", "");

如果它后面跟着""的0-n个字符,它会删除(用"0.00000..."代替)减号,因此它将适用于任何类似的结果,例如"-0""-0.""-0.000000000"
这是一些测试代码:
public static void main(String[] args) {
    System.out.println(format(-0.023));
    System.out.println(format(12.123));
    System.out.println(format(-12.345));
    System.out.println(format(-0.123));
    System.out.println(format(-1.777));
}

public static String format(double number) {
    DecimalFormat df = new DecimalFormat("#,##0.0");
    df.setRoundingMode(RoundingMode.HALF_UP);
    String formattedValue = df.format(number);
    formattedValue = formattedValue.replaceAll("^-(?=0(\\.0*)?$)", "");
    return formattedValue;
}

输出(按预期):
0.0
12.1
-12.3
-0.1
-1.8

10-05 18:24