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

Ama*_*den 5 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));
Run Code Online (Sandbox Code Playgroud)

但是DecimalFormat具有将;负数格式设置为不同于正数的字符.我无法正常工作.据我所知,以下代码应该像上面这样工作.

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

System.out.println(fmt.format(netAmt));
Run Code Online (Sandbox Code Playgroud)

结果是,之前的模式;用于负数和正数,导致-005.25错误保留.我究竟做错了什么?我误解了什么;是为了什么?

Goi*_*niu 5

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

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

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


cra*_*fty 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));
Run Code Online (Sandbox Code Playgroud)

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