Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Java基本 > 数データ −3.フォーマット処理
更新日:2005/9/22
数データ−3.フォーマット処理
このページでは数データのフォーマット処理に関するメソッドを紹介します。
フォーマット処理

数データに対し通貨記号($)をつけたり、通貨セパレータ(,)をつけるなどのフォーマット処理を行いたい場合があります。その際はNumberFormatクラスを使用して、数データに様々なフォーマット処理をほどこすことができます。

フォーマット処理においては、まずgetNumberInstanceやgetCurrencyInstanceなどNumberFormatクラスで用意されているファクトリメソッドを使用して、NumberFormatオブジェクトの作成を行います。その後そのオブジェクトよりformatメソッドを呼び出し、数データのフォーマット処理を行います。

戻り型
メソッド
説明
String
String
format(double)
format(Double)
format(long)
format(Long)
引数に指定された値のフォーマット処理を行います。
static NumberFormat
static NumberFormat
getNumberInstance( ) getNumberInstance(Locale)
汎用数値フォーマットを持つ、NumberFormatオブジェクトの生成を行います。ロケールの指定をした場合はそのロケールの情報をもつオブジェクトの生成を行います。
static NumberFormat
static NumberFormat
getCurrencyInstance( ) getCurrencyInstance(Locale)
通貨フォーマットを持つ、NumberFormatオブジェクトの生成を行います。ロケールの指定をした場合はそのロケールの情報をもつオブジェクトの生成を行います。
static NumberFormat static NumberFormat
getPercentInstance( ) getPercentInstance(Locale)
パーセントフォーマットを持つ、NumberFormatオブジェクトの生成を行います。ロケールの指定をした場合はそのロケールの情報をもつオブジェクトの生成を行います。

【例1】数データに対し、汎用数値フォーマット処理、通貨フォーマット処理、パーセントフォーマット処理をそれぞれ行います。

import java.text.*;

public class ExNumber5 {
 public static void main(String[] args) {
  long exFormat1 = 1000000L;
  long exFormat2 = 2000000L;
  double exFormat3 = 0.50D;
  NumberFormat exObject1 = NumberFormat.getNumberInstance(); //(1)
  NumberFormat exObject2 = NumberFormat.getCurrencyInstance(); //(2)
  NumberFormat exObject3 = NumberFormat.getPercentInstance(); //(3)

  System.out.println(exObject1.format(exFormat1)); //(4)
  System.out.println(exObject2.format(exFormat2)); //(5)
  System.out.println(exObject3.format(exFormat3)); //(6)
 }
}

【解説1】

(1). getNumberInstanceメソッドを使用し、汎用数値フォーマットを持つNumberFormatオブジェクトの生成を行います。
(2). getCurrencyInstanceメソッドを使用し、通貨フォーマットを持つNumberFormatオブジェクトの生成を行います。
(3). getPercentInstanceメソッドを使用し、パーセントフォーマットを持つNumberFormatオブジェクトの生成を行います。
(4). formatメソッドを使用し、引数に指定された値の汎用数値フォーマット処理を行います。
(5). formatメソッドを使用し、引数に指定された値の通貨フォーマット処理を行います。
(6). formatメソッドを使用し、引数に指定された値のパーセントフォーマット処理を行います。

【実行結果1】

D:\JAVA>javac ExNumber5.java

D:\JAVA>java ExNumber5
1,000,000
¥2,000,000
50%

D:\JAVA>
カスタムフォーマット処理

DecimalFormatクラスを使用することにより、より細かなフォーマット形式を指定することができます。DecimalFormatクラスはNumberFormatクラスのサブクラスです。

処理の流れは、まずコンストラクタの引数に実行したいパターンを指定して、DecimalFormatオブジェクトの生成を行います。その後、そのオブジェクトからformatメソッドを呼び出し、数データのフォーマット処理を行います。

【コンストラクタ】

メソッド
説明
DecimalFormat ( )
デフォルトロケールに対して、デフォルトのパターンを使用して、DecimalFormatオブジェクトの生成を行います。
DecimalFormat (String)
デフォルトロケールに対して、指定されたパターンを使用して、DecimalFormatオブジェクトの生成を行います。
DecimalFormat (String, DecimalFormatSymbols)
指定されたパターンと引数のDecimalFormatSymbolsオブジェクトで指定された記号を使用して、DecimalFormatオブジェクトの生成を行います。

【パターン】

パターン
説明
#
数字を表します。値が0の場合はその値は表示されません。
0
数字を表します。値が0の場合はその値には0が表示されます。
.(ドット)
整数値と小数値の区切りを表します。
,(カンマ)
数データのグループセパレータを表します。
%
数データを100倍し、%を付与します。
'(シングルクォーテーション)
フォーマット処理時にフォーマットパターンと捉えられたくないパターン記号を'(シングクォーテーション)で囲みます。(例)'#'
\u00A5
通貨記号を表します。

【例2】いくつかのパターンを使用して数データのフォーマット処理を行います。

import java.text.*;

public class ExNumber6 {
 public static void main(String[] args) {
  double exValue1 = 1251.24D;
  DecimalFormat exFormat1 = new DecimalFormat("###,###.###"); //(1)
  System.out.println(exFormat1.format(exValue1)); //(2)

  double exValue2 = 1251.24D;
  DecimalFormat exFormat2 = new DecimalFormat("000,000.000");
  System.out.println(exFormat2.format(exValue2)); //(3)

  double exValue3 = 1251.24D;
  DecimalFormat exFormat3 = new DecimalFormat("\u00A5###,###");
  System.out.println(exFormat3.format(exValue3)); //(4)

  double exValue4 = 0.50D;
  DecimalFormat exFormat4 = new DecimalFormat("###%");
  System.out.println(exFormat4.format(exValue4)); //(5)

  double exValue5 = 0.50D;
  DecimalFormat exFormat5 = new DecimalFormat("'%'###%");
  System.out.println(exFormat5.format(exValue5)); //(6)
 }
}

【解説2】

(1). パターンを指定して、DecimalFormatオブジェクトの生成を行います。
(2). formatメソッドを呼び出し、値のフォーマットを行います。このパターンでは数値を3桁づつグルーピングしています。数値のない桁は表示されません。
(3). このパターンでは数値を3桁づつグルーピングしています。数値のない桁は0が表示されます。
(4). このパターンでは数値の先頭に通貨記号を付与しています。小数点以下はパターンがないため、四捨五入されます。
(5). このパターンでは数値を100倍し、接尾に%を付与しています。
(6). このパターンでは先頭の%は'(シングルクォーテーション)で囲まれているためフォーマット化されず、そのまま表記されます。

【実行結果2】

D:\JAVA>javac ExNumber6.java

D:\JAVA>java ExNumber6
1,251.24
001,251.240
\1,251
50%
%50%

D:\JAVA>
ロケールの指定

NumberFormatクラス、DecimalFormatクラスを使用する際、その出力結果は現在設定しているロケールに深く依存します。 ロケールとはその地域独自の言語体系、通貨体系、数値体系を言います。ロケールが日本である場合、通貨フォーマットを使用すると通貨記号は\が表示されます。ロケールが米国である場合、通貨フォーマットを使用すると通貨記号は$が表示されます。

現在のロケールを表示したり、ロケールの変更を行う場合はLocaleクラスのgetDefaultメソッドやsetDefaultメソッドが利用できます。また、NumberFormatオブジェクトを生成する際、getNumberInstanceなどファクトリメソッドの引数にロケールを指定することでそのフォーマットにおけるロケールを変更することもできます。

戻り型
メソッド
説明
static Locale
getDefault( )
該当インスタンスに対するデフォルトロケールの現在の値を返します。
static void
setDefault(Locale)
該当インスタンスに対するロケールの設定を行います。

【例3】LocaleクラスのsetDefaultメソッドを使用してロケールの設定を行います。

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

public class ExNumber7 {
  public static void main(String[] args) {
    System.out.println(Locale.getDefault());   //(1)
    Locale.setDefault(Locale.US);   //(2)
    NumberFormat exValue = NumberFormat.getCurrencyInstance(); //(3)
    System.out.println(exValue.format(10000));   //(4)
  }
}

【解説3】

(1). getDefaultメソッドで現在のデフォルトロケール値を取得して表示します。
(2). setDefaultメソッドでデフォルトロケールの指定を米国に変更します。
(3). getCurrencyInstanceメソッドで通貨フォーマットを持つNumberFormatオブジェクトの生成を行います。
(4). formatメソッドを使用し、デフォルトロケール(米国)での通貨フォーマット処理を行います。
setDefaultメソッドの引数に指定されたロケール定数の一覧はこちらを参照してください。

【実行結果3】

D:\JAVA>javac ExNumber7.java

D:\JAVA>java ExNumber7
ja_JP
$10,000.00

D:\JAVA>

【例4】NumberFormatオブジェクトを生成する際、ファクトリメソッドの引数にロケールを指定してロケールの変更を行います。

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

public class ExNumber8 {
  public static void main(String[] args) {
    NumberFormat exValue =
      NumberFormat.getCurrencyInstance(Locale.UK);   //(1)
    System.out.println(exValue.format(10000));   //(2)
  }
}

【解説4】

(1). getCurrencyInstanceメソッドの引数に英国のロケールを指定してNumberFormatオブジェクトの生成を行います。
(2). formatメソッドを使用し、デフォルトロケール(英国)での通貨フォーマット処理を行います。
ファクトリメソッド(getCurrencyInstance)の引数に指定されたロケール定数の一覧はこちらを参照してください。

【実行結果4】

D:\JAVA>javac ExNumber8.java

D:\JAVA>java ExNumber8
£10,000.00

D:\JAVA>



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道