DecimalFormat子模式边界不能正常工作

时间:2011-02-17 16:03:11

标签: java decimalformat

我使用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错误保留。我究竟做错了什么?我误解了;的用途吗?

2 个答案:

答案 0 :(得分:4)

我很确定忽略第二种模式,并且只使用特定于否定的部分,例如 - 标志或()等。

这是我从JavaDocs

阅读以下段落的理解
  

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

答案 1 :(得分: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位数时,您希望行为是什么,即不适合?