目次へ

7.4. 数値の表現

数値データを整形して出力するためには、「java.text.NumberFormat」「java.text.DecimalFormat」クラスを使用します。細かく整形フォーマットを指定するためには、DecimalFormatクラスを使用します。DecimalFormatでは、コンストラクタでフォーマットを指定し、「format」メソッドで整形を行います。

DecimalFormatで指定できるフォーマットの形式は以下のようになっています。

[接頭辞] 数値フォーマット[接尾辞]
[接頭辞] 正の数のフォーマット[接尾辞] ; [接頭辞] 負の数のフォーマット[接尾辞]

正と負でフォーマットを分けたい場合は後者を、そうでない場合は前者を用いてください。接頭辞と接尾辞は省略可能です。数値フォーマットで指定できるフォーマットは以下のパターンに分類できます。これ以外のパターンのフォーマット(例えば「,##0.0##E0」など)を指定しても、以下のいずれかと解釈されるので注意してください。

0
0.0
##0.0##E0
,##0 ,##0.0##

「0」は最小桁数を表します。数値が最小桁数に満たない場合には、0を補完します。

new DecimalFormat("00000").format(1234);   // 01234を返す
new DecimalFormat("000.000").format(2.34); // 002.340を返す

浮動小数点表記において、「#」は最大桁数を表します。「##0.0##E0」は最大桁数6である事を意味します。小数点以上最大3桁小数点以下最大3桁という意味にはならないので、注意してください。また指数の値は、小数点以上で指定した桁数の倍数になるように整形されます。「##0.0##E0」の指数は3の倍数になります。

new DecimalFormat("##0.0##E0").format(1234.567); // 1.23457E3を返す(丸めが行われます)
new DecimalFormat("00.0#E00").format(1234.567);  // 12.34E02を返す

「,」は区切り文字を表します。「,」が小数点以上の側に現れた場合には、その桁数毎に区切り文字が挿入されます。区切り文字として使用される文字はロケールによって異なります。

new DecimalFormat(",##0").format(1234.567);     // 1,234を返す
new DecimalFormat(",##0.0##").format(1234.567); // 1,234.567を返す

接頭辞と接尾辞に指定した文字は、そのまま出力されます。ただし数値フォーマットの指定で使用される特別な文字を使う場合には、「E」を除いて「'」で囲まなければなりません。また「%」「‰(\u2030)」を指定した場合には、指定した数値は100倍、1000倍して表示されます。ただし浮動点表記を行う場合には正しく動作しません。「\u00A4」を指定した場合には、通貨記号が表示されます。通貨記号はロケールによって異なります。

特に細かい指定をしたくない場合には、ロケールで指定されているデフォルトのフォーマットを使用する事も可能です。NumberFormatクラスのクラスメソッドでNumberFormatを取得し、formatメソッドを実行します。

NumberFormat getInstance() デフォルトの汎用フォーマットを返します。
NumberFormat getNumberInstance() デフォルトの数値フォーマットを返します。
NumberFormat getIntegerInstance() デフォルトの数値フォーマットを返します。
NumberFormat getPercentInstance() %表記を行う場合の、デフォルトフォーマットを返します。
NumberFormat getCurrencyInstance() デフォルトの通貨フォーマットを返します。
NumberFormat format = NumberFormat.getCurrencyInstance();
format.format(1234);

(実習課題4)

円周率および自然対数の底 e を、色々な数値フォーマットで出力するコンソールプログラムを作成しなさい。少なくとも5種類それぞれの数値フォーマットで出力するようにする事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp