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

2番目のパターンは無視され、否定に固有の部分のみが使用されると確信しています。たとえば、-記号や()などです。

これは、 JavaDocsから次の文章を読むことについての私の理解です。

DecimalFormatパターンには、「#、## 0.00;(#、## 0.00)」のように、正と負のサブパターンが含まれています。各サブパターンには、接頭辞、数値部分、および接尾辞があります。負のサブパターンはオプションです。存在しない場合は、ローカライズされたマイナス記号(ほとんどのロケールでは「-」)が前に付いた正のサブパターンが負のサブパターンとして使用されます。つまり、「0.00」だけで「0.00;-0.00」に相当します。明示的な負のサブパターンがある場合、それは負の接頭辞と接尾辞を指定するためだけに機能します。桁数、最小桁数、およびその他の特性はすべて正のパターンと同じです。つまり、「#、## 0.0#;(#)」は「#、## 0.0#;(#、## 0.0#)」とまったく同じ動作を生成します。

于 2011-02-17T16:16:28.330 に答える
4

次の文字列パターンは役に立ちますか:"%06.2f%n" 前面に「0」が埋め込まれた6の固定幅ですか?

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 に答える