如何格式化数字以仅在非 0 时包含“+/-”?

How to format a number to include a "+/-" only when it is Not 0?

我想显示带有 +/- 符号的 double 数字,我为此使用了这种十进制格式

double d = 0;
    DecimalFormat nf = new DecimalFormat("+#0.0;-#0.0");
    System.out.println(nf.format(d));

    d = -1;
    System.out.println(nf.format(d));

    d = 1;
    System.out.println(nf.format(d));

而且我正在这样输出

+0.0
-1.0
+1.0

但我想要 0.0 没有 + 符号,例如

 0.0
-1.0
+1.0

谢谢

this 一样,我不完全确定是否有办法使用 十进制格式来解决此问题,但是对中给出的正则表达式稍作修改这个答案(同样,信用:@Bohemian)似乎解决了这个问题。

System.out.println(nf.format(d).replaceAll("^[-+](?=0(.0*)?$)", ""));

这只是查找格式为数字 0 的数字(即 0 后跟小数点后的一些零),删除它前面的符号。

如果您在此论坛上搜索,您的问题已经有答案。答案可在

仅使用格式符号无法满足您的要求。应用格式后,您必须将符号替换为“”(空)。

为清楚起见,以下代码段将为您提供所需的答案。

public class FormatTester {
public static void main(String[] args){

DecimalFormat nf = new DecimalFormat("#,##0.0");
String formattedValue = nf.format(Double.parseDouble(args[0]));
formattedValue = formattedValue.replaceAll( "^-(?=0(.0*)?$)", "");

System.out.println(">>>> "+formattedValue+" <<<<");    
}
}

也许更好更简单的代码:

String style = d > 0 ? "+%.2f" : "% .2f";
System.out.println(String.format(style, d));