我使用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
错误保留。我究竟做错了什么?我误解了;
的用途吗?
答案 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位数时,您希望行为是什么,即不适合?