Javaに関する様々な情報をご紹介します。

3フォーマット処理

Javaに関する様々な情報をご紹介します。

フォーマット処理

このページでは数データのフォーマット処理に関するメソッドを紹介します。

フォーマット処理

数データに対し通貨記号$をつけたり、通貨セパレータをつけるなどのフォーマット処理を行いたい場合があります。その際は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. (1)getNumberInstanceメソッドを使用し、汎用数値フォーマットを持つNumberFormatオブジェクトの生成を行います。
  2. (2)getCurrencyInstanceメソッドを使用し、通貨フォーマットを持つNumberFormatオブジェクトの生成を行います。
  3. (3)getPercentInstanceメソッドを使用し、パーセントフォーマットを持つNumberFormatオブジェクトの生成を行います。
  4. (4)formatメソッドを使用し、引数に指定された値の汎用数値フォーマット処理を行います。
  5. (5)formatメソッドを使用し、引数に指定された値の汎用数値フォーマット処理を行います。
  6. (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. (1)パターンを指定して、DecimalFormatオブジェクトの生成を行います。
  2. (2)formatメソッドを呼び出し、値のフォーマットを行います。このパターンでは数値を3桁づつグルーピングしています。数値のない桁は表示されません。
  3. (3)このパターンでは数値を3桁づつグルーピングしています。数値のない桁は0が表示されます。
  4. (4)このパターンでは数値の先頭に通貨記号を付与しています。小数点以下はパターンがないため、四捨五入されます。
  5. (5)このパターンでは数値を100倍し、接尾に%を付与しています。
  6. (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. (1)getDefaultメソッドで現在のデフォルトロケール値を取得して表示します。
  2. (2)setDefaultメソッドでデフォルトロケールの指定を米国に変更します。
  3. (3)getCurrencyInstanceメソッドで通貨フォーマットを持つNumberFormatオブジェクトの生成を行います。
  4. (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. (1)getCurrencyInstanceメソッドの引数に英国のロケールを指定してNumberFormatオブジェクトの生成を行います。
  2. (2)formatメソッドを使用し、デフォルトロケール(英国)での通貨フォーマット処理を行います。

※ ファクトリメソッド(getCurrencyInstance)の引数に指定されたロケール定数の一覧はこちらを参照してください。

実行結果4

D:\JAVA>javac ExNumber8.java

D:\JAVA>java ExNumber8
£10,000.00

D:\JAVA>

3フォーマット処理