5

我正在使用 DecimalFormat 创建一个始终为 6 个字符长的格式化十进制。起初我使用了格式字符串,new DecimalFormat("000.00")但这给了我一个负数的错误。添加减号并使第一个空格变大,导致-005.25而不是-05.25如所愿。

我已经能够使用以下代码解决此问题

DecimalFormat fmt;  
if(netAmt < 0){  
    fmt = new DecimalFormat("00.00");  
}else{  
    fmt = new DecimalFormat("000.00");  
}  

System.out.println(fmt.format(netAmt));

但是 DecimalFormat 具有;格式化负数与正数不同的字符。我无法正确完成这项工作。据我了解,以下代码应该像上面一样工作。

DecimalFormat fmt = new DecimalFormat("000.00;00.00");  

System.out.println(fmt.format(netAmt));

结果是 之前的模式;同时用于负数和正数,导致-005.25错误仍然存​​在。我究竟做错了什么?我误解了什么;是为了?

4

2 回答 2

4

以下字符串模式是否对您有帮助:"%06.2f%n" 固定宽度为 6,前面填充“0”?

例子

System.out.println(String.format("%06.2f%n",1.3));
System.out.println(String.format("%06.2f%n",-3.323));

当数字大于 3 位数时,您希望行为是什么,即不适合?

于 2011-04-05T10:14:04.727 回答
4

我很确定第二个模式被忽略了,并且只使用了特定于否定的部分,例如 - 符号或 () 等。

这就是我从JavaDocs中阅读以下段落的理解

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

于 2011-02-17T16:16:28.330 回答