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

时间:2015-06-10 04:33:26

标签: java decimalformat

我想用+/-符号显示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

谢谢

3 个答案:

答案 0 :(得分:2)

也许更好更简单的代码:

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

如果您在此论坛上搜索,则您的问题已经存在答案。答案可在https://stackoverflow.com/a/11929642/4284989

获得

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

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

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+" <<<<");    
}
}