在java中为零的负号

当结果返回零时,有没有办法截断负号; 使用十进制格式?

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 

我认为这将是一个避免-0.0的解决方法。 使用以下代码:

 DecimalFormat df = new DecimalFormat("#,##0.0"); df.setRoundingMode(RoundingMode.HALF_UP); df.setNegativePrefix(""); // set negative prefix BLANK String formattedValue = df.format(-0.023); df.setNegativePrefix("-"); // set back to - again System.out.println(formattedValue); 

输出:

 0.0 

试试这个: DecimalFormat df = new DecimalFormat("#,##0.0#;(#,##0.0#)");

根据DecimalFormat的Javadoc :

DecimalFormat模式包含正负子模式,例如“#,## 0.00;(#,## 0.00)”。 每个子模式都有前缀,数字部分和后缀。 负子模式是可选的; 如果不存在,那么前缀为局部减号(在大多数语言环境中为“ – ”)的正子模式将用作负子模式。 即,仅“0.00”相当于“0.00; -0.00”。 如果存在明确的否定子模式,则仅用于指定否定前缀和后缀; 数字,最小数字和其他特征都与正模式相同。 这意味着“#,## 0.0#;(#)”产生与“#,## 0.0#;(#,## 0.0#)”完全相同的行为。

通过检查计算值是否为“-0.0”使其等于“0.0”

并且您可以将代码封装为

 public String getFormattedValue(String input) { DecimalFormat df = new DecimalFormat("#,##0.0"); df.setRoundingMode(RoundingMode.HALF_UP); String formattedValue = df.format(input); if (formattedValue.equalsIgnoreCase("-0.0")) { formattedValue = "0.0"; } System.out.println(formattedValue); return formattedValue; } 

我发现-0非常有用,因为它告诉你舍入的值实际上是负数(对某些函数来说可能有很多意义)。 对我来说唯一的问题是-1 * 0实际上是0并且应格式化为0尽管它不是Java格式化程序。

以下格式化程序负责这一点,没有昂贵的String操作成本(尤其是RegExps):

 public static String formatWithoutMinusZeroIssue(double d, DecimalFormat yourFormatter) { if (d == 0) { return yourFormatter.format(0); } else { return yourFormatter.format(d); } } 

这使用了这样的事实:尽管-1 * 00的格式不同,但它们是相同的。