数値の表示をフォーマットする


NumberFormat classやDecimalFormat classを使って数値の表示書式を編集できます。

import  java.text.*;

public class ExamNumberFormat1 {
    public static void main(String[] args) {
        NumberFormat nf  = NumberFormat.getInstance();
        System.out.println(nf.format(12345.67));
    }
}


class ExamDecimalFormat1 {
    public static void main(String[] args) {
        DecimalFormat df   = new DecimalFormat("###,###,##0.00");
        DecimalFormat df2  = new DecimalFormat("###,###,##0.00;###,###,##0.00-");
        System.out.println(df.format(0012345.1));
        System.out.println(df.format(0));
        System.out.println(df.format(-0012345.0));
        System.out.println(df2.format(0012345.1));
        System.out.println(df2.format(0));
        System.out.println(df2.format(-0012345.0));
    }
}



import  java.text.*;
import  java.util.*;

class ExamDecimalFormat2 {
    public static void main(String[] args) {
        DecimalFormat df  
                = (DecimalFormat)DecimalFormat.getInstance(Locale.GERMAN);
        df.applyPattern("###,###,##0.00;###,###,##0.00-");
        System.out.println(df.format(0012345.1));
        System.out.println(df.format(-0012345.0));
    }
}

<実行結果>

ExamNumberFormat1 コンソール画面に
12,345.67
と表示されます。
getInstance メソッドで自国の表記書式に対応したNumberFormat Instanceを入手できます。
例えば、小数点を表す表記は日本では"."でドイツでは","になります
NumberFormat class はabstract classなので、newでインスタンスを生成することはできません。

ExamDecimalFormat1

コンソール画面に
12,345.10
0.00
-12,345.00
12,345.10
0.00
12,345.00-
と表示されます。

DecimalFormatクラスを使うとユーザーが任意の書式を設定できます。
上の例では、先頭の0を表示しない、小数点以下2桁の書式をコンストラクタで設定しています。
df2のコンストラクタは1つ目のパターンは正の数の場合、2つ目のパターンは負の数の場合のパターンです。
defaultでは"-"は左表示(prefix)になるので、右表示(suffix)したい場合はこのように記述します。
もちろんこれ以外にも書式設定が可能ですから、API Documentを参照してください。

ExamDecimalFormat2

コンソール画面に
12.345,10
12.345,00-
と表示されます。
1000の区切り文字や、小数点の表記がコーディングと異なっていることに注目してください。

このsampleは、直接DecimalFormat classをnewせずに、
getInstance methodでNumberFormatを入手し、DecimalFormatにcastしています。
NumberFormat instanceは自国の(もしくは指定したlocaleの)書式に対応しています。
castした後に、applyPattern method で表示書式の追加設定が可能です。
先頭の0の非表示や、1000の区切りの有無は、ユーザーが指定していますが、1000の区切り記号、小数点を表す記号は、localeが採用されています。
sampleではlocae(German)を指定していますが、defaultのlocaleにしておけば、国際化対応が可能です。



DecimalFormat classを使えば、文字列を数値に変換することも可能です。