Java : NumberFormat - API使用例

NumberFormat (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

NumberFormatは、すべての数値フォーマットに対するabstract基底クラスです。 このクラスは、数値のフォーマットと解析のためのインタフェースです。 さらにNumberFormatは、数値フォーマットがどのロケールにあり、その名前が何であるかを知るためのメソッドを提供します。

クラス構成

NumberFormat クラスは、ロケール(言語、国・地域) に依存した数値に関する情報を、そのロケールに適した表記へと変換(フォーマット) します。

例えば、通貨をフォーマットすると、ロケールによって

  • 日本 : ¥(円)
  • アメリカ : $ (ドル)

となります。

また、数値には3桁ごとの区切り文字が入ります。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format = NumberFormat.getNumberInstance();

System.out.println(format.format(1234000)); // 1,234,000
System.out.println(format.format(-56789)); // -56,789
System.out.println(format.format(0.123456)); // 0.123
final var number = 1234;

final var format1 = NumberFormat.getCurrencyInstance(Locale.JAPAN);
System.out.println(format1.format(number)); // ¥1,234

final var format2 = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(format2.format(number)); // $1,234.00
final var number = 10000000;

final var format1 = NumberFormat.getCompactNumberInstance(Locale.JAPAN, NumberFormat.Style.SHORT);
System.out.println(format1.format(number)); // 1000万

final var format2 = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG);
System.out.println(format2.format(number)); // 10 million

フィールド

static final int FRACTION_FIELD

FieldPositionオブジェクトを構築するためのフィールド定数です。

このメソッドの使用例は、format(double number, StringBuffer toAppendTo, FieldPosition pos) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

static final int INTEGER_FIELD

FieldPositionオブジェクトを構築するためのフィールド定数です。

このメソッドの使用例は、format(double number, StringBuffer toAppendTo, FieldPosition pos) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

コンストラクタ

NumberFormat ()

唯一のコンストラクタです。

独自にサブクラスを作ることは少ないと思いますので、コード例は割愛します。

メソッド

Object clone ()

Cloneableをオーバーライドします。

final var number = 1.234;

final var format = NumberFormat.getNumberInstance();
format.setMaximumFractionDigits(2);
System.out.println(format.format(number)); // 1.23

if (format.clone() instanceof NumberFormat cloned) {
    System.out.println(cloned.format(number)); // 1.23
    System.out.println(cloned.equals(format)); // true
}

boolean equals (Object obj)

equalsをオーバーライドします。

final var format1 = NumberFormat.getNumberInstance();
final var format2 = NumberFormat.getCurrencyInstance();

System.out.println(format1.equals(format2)); // false
final var format1 = NumberFormat.getNumberInstance();
final var format2 = NumberFormat.getNumberInstance();

System.out.println(format1.equals(format2)); // true

format1.setMaximumFractionDigits(2);
System.out.println(format1.equals(format2)); // false

final String format (double number)

フォーマットの特殊化です。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var number = 1.234;

final var format = NumberFormat.getNumberInstance();
System.out.println(format.format(number)); // 1.234

format.setMaximumFractionDigits(2);
System.out.println(format.format(number)); // 1.23

format.setMinimumIntegerDigits(3);
System.out.println(format.format(number)); // 001.23

abstract StringBuffer format (double number, StringBuffer toAppendTo, FieldPosition pos)

フォーマットの特殊化です。

final var number = 123.456;

final var format = NumberFormat.getNumberInstance(Locale.US);
System.out.println(format.format(number)); // 123.456

{
    final var sb = new StringBuffer("num = ");
    System.out.println(sb); // num =

    final var pos = new FieldPosition(NumberFormat.INTEGER_FIELD);
    final var ret = format.format(number, sb, pos);
    System.out.println(ret); // num = 123.456

    System.out.println(pos.getBeginIndex()); // 6
    System.out.println(pos.getEndIndex()); // 9
}
{
    final var sb = new StringBuffer("num = ");
    System.out.println(sb); // num =

    final var pos = new FieldPosition(NumberFormat.FRACTION_FIELD);
    final var ret = format.format(number, sb, pos);
    System.out.println(ret); // num = 123.456

    System.out.println(pos.getBeginIndex()); // 10
    System.out.println(pos.getEndIndex()); // 13
}

final String format (long number)

フォーマットの特殊化です。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var number = 1234L;

final var format1 = NumberFormat.getCurrencyInstance();
System.out.println(format1.format(number)); // ¥1,234

final var format2 = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(format2.format(number)); // $1,234.00

abstract StringBuffer format (long number, StringBuffer toAppendTo, FieldPosition pos)

フォーマットの特殊化です。

final var format = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
format.setMinimumFractionDigits(2);

final var number = 12340L;
System.out.println(format.format(number)); // 12.34K

{
    final var sb = new StringBuffer("num = ");
    System.out.println(sb); // num =

    final var pos = new FieldPosition(NumberFormat.INTEGER_FIELD);
    final var ret = format.format(number, sb, pos);
    System.out.println(ret); // num = 12.34K

    System.out.println(pos.getBeginIndex()); // 6
    System.out.println(pos.getEndIndex()); // 8
}
{
    final var sb = new StringBuffer("num = ");
    System.out.println(sb); // num =

    final var pos = new FieldPosition(NumberFormat.FRACTION_FIELD);
    final var ret = format.format(number, sb, pos);
    System.out.println(ret); // num = 12.34K

    System.out.println(pos.getBeginIndex()); // 9
    System.out.println(pos.getEndIndex()); // 11
}

StringBuffer format (Object number, StringBuffer toAppendTo, FieldPosition pos)

数値をフォーマットし、その結果のテキストを指定された文字列バッファに追加します。

final var format = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
format.setMinimumFractionDigits(2);

final var number = new BigInteger("12340000000000");
System.out.println(format.format(number)); // 12.34T

{
    final var sb = new StringBuffer("num = ");
    System.out.println(sb); // num =

    final var pos = new FieldPosition(NumberFormat.INTEGER_FIELD);
    final var ret = format.format(number, sb, pos);
    System.out.println(ret); // num = 12.34T

    System.out.println(pos.getBeginIndex()); // 6
    System.out.println(pos.getEndIndex()); // 8
}
{
    final var sb = new StringBuffer("num = ");
    System.out.println(sb); // num =

    final var pos = new FieldPosition(NumberFormat.FRACTION_FIELD);
    final var ret = format.format(number, sb, pos);
    System.out.println(ret); // num = 12.34T

    System.out.println(pos.getBeginIndex()); // 9
    System.out.println(pos.getEndIndex()); // 11
}

static Locale[] getAvailableLocales ()

このクラスのget*Instanceメソッドがローカライズされたインスタンスを返すことのできるロケールすべての配列を返します。

final var locales = NumberFormat.getAvailableLocales();

for (final var locale : locales) {
    System.out.println(locale.toLanguageTag());
}

// 結果
// ↓
//und
//he
//th-Thai-TH
//nds
//tk-Latn-TM
//ti-ET
//ta-SG
//lv
//en-NU
//... 省略 ...

static NumberFormat getCompactNumberInstance ()

"SHORT"書式設定スタイルのデフォルトFORMATロケールに対してコンパクト数値書式設定を返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var number = 10000000;

final var format1 = NumberFormat.getCompactNumberInstance();
System.out.println(format1.format(number)); // 1000万

final var format2 = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
System.out.println(format2.format(number)); // 10M

final var format3 = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.LONG);
System.out.println(format3.format(number)); // 10 million

static NumberFormat getCompactNumberInstance (Locale locale, NumberFormat.Style formatStyle)

指定されたlocaleおよびformatStyleに対してコンパクトな数値形式を返します。

このメソッドの使用例は、getCompactNumberInstance() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Currency getCurrency ()

通貨値のフォーマット時に、この数値フォーマットが使用する通貨を取得します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var number = 1234;

final var format1 = NumberFormat.getCurrencyInstance();
System.out.println(format1.format(number)); // ¥1,234
System.out.println(format1.getCurrency()); // JPY
System.out.println(format1.getMinimumFractionDigits()); // 0

final var format2 = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(format2.format(number)); // $1,234.00
System.out.println(format2.getCurrency()); // USD
System.out.println(format2.getMinimumFractionDigits()); // 2

static final NumberFormat getCurrencyInstance ()

現在のデフォルトのFORMATロケールに対する通貨フォーマットを返します。

このメソッドの使用例は、getCurrency() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

static NumberFormat getCurrencyInstance (Locale inLocale)

指定されたロケールに対する通貨フォーマットを返します。

このメソッドの使用例は、getCurrency() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

static final NumberFormat getInstance ()

現在のデフォルトのFORMATロケールに対する汎用数値フォーマットを返します。

このメソッドは getNumberInstance() と同等です。
API使用例はそちらをご参照ください。

static NumberFormat getInstance (Locale inLocale)

指定されたロケールに対する汎用数値フォーマットを返します。

このメソッドは getNumberInstance(inLocale) と同等です。
API使用例はそちらをご参照ください。

static final NumberFormat getIntegerInstance ()

現在のデフォルトのFORMATロケールに対する整数型数値フォーマットを返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format1 = NumberFormat.getIntegerInstance();
System.out.println(format1.getRoundingMode()); // HALF_EVEN
System.out.println(format1.isParseIntegerOnly()); // true

System.out.println(format1.format(12345678)); // 12,345,678
System.out.println(format1.format(9.9)); // 10

final var format2 = NumberFormat.getIntegerInstance(Locale.GERMANY);
System.out.println(format2.format(12345678)); // 12.345.678
System.out.println(format2.format(9.9)); // 10

static NumberFormat getIntegerInstance (Locale inLocale)

指定されたロケールに対する整数型数値フォーマットを返します。

このメソッドの使用例は、getIntegerInstance() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

int getMaximumFractionDigits ()

数値の小数部分として可能な最大桁数を返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format = NumberFormat.getNumberInstance();

System.out.println(format.getMinimumFractionDigits()); // 0
System.out.println(format.getMaximumFractionDigits()); // 3

System.out.println(format.format(0.01234)); // 0.012
System.out.println(format.format(456.0)); // 456

format.setMinimumFractionDigits(1);
format.setMaximumFractionDigits(4);

System.out.println(format.getMinimumFractionDigits()); // 1
System.out.println(format.getMaximumFractionDigits()); // 4

System.out.println(format.format(0.01234)); // 0.0123
System.out.println(format.format(456.0)); // 456.0

int getMaximumIntegerDigits ()

数値の整数部分として可能な最大桁数を返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format = NumberFormat.getNumberInstance();

System.out.println(format.getMinimumIntegerDigits()); // 1
System.out.println(format.getMaximumIntegerDigits()); // 2147483647

System.out.println(format.format(1234567890)); // 1,234,567,890
System.out.println(format.format(1)); // 1

format.setMinimumIntegerDigits(3);
format.setMaximumIntegerDigits(8);

System.out.println(format.getMinimumIntegerDigits()); // 3
System.out.println(format.getMaximumIntegerDigits()); // 8

System.out.println(format.format(1234567890)); // 34,567,890
System.out.println(format.format(1)); // 001

int getMinimumFractionDigits ()

数値の小数部分として可能な最小桁数を返します。

このメソッドの使用例は、getMaximumFractionDigits() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

int getMinimumIntegerDigits ()

数値の整数部分として可能な最小桁数を返します。

このメソッドの使用例は、getMaximumIntegerDigits() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

static final NumberFormat getNumberInstance ()

現在のデフォルトのFORMATロケールに対する汎用数値フォーマットを返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format1 = NumberFormat.getNumberInstance();

System.out.println(format1.format(12345678)); // 12,345,678
System.out.println(format1.format(0.123)); // 0.123

final var format2 = NumberFormat.getNumberInstance(Locale.GERMANY);

System.out.println(format2.format(12345678)); // 12.345.678
System.out.println(format2.format(0.123)); // 0,123

static NumberFormat getNumberInstance (Locale inLocale)

指定されたロケールに対する汎用数値フォーマットを返します。

このメソッドの使用例は、getNumberInstance() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

static final NumberFormat getPercentInstance ()

現在のデフォルトのFORMATロケールに対するパーセント・フォーマットを返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format1 = NumberFormat.getPercentInstance();
System.out.println(format1.format(0.75)); // 75%

final var format2 = NumberFormat.getPercentInstance(Locale.FRANCE);
System.out.println(format2.format(0.75)); // 75 %

static NumberFormat getPercentInstance (Locale inLocale)

指定されたロケールに対するパーセント・フォーマットを返します。

このメソッドの使用例は、getPercentInstance() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

RoundingMode getRoundingMode ()

このNumberFormatで使用されるRoundingModeを取得します。

final var format = NumberFormat.getNumberInstance(Locale.US);
System.out.println(format.getMaximumFractionDigits()); // 3
System.out.println(format.getRoundingMode()); // HALF_EVEN

System.out.println(format.format(0.1114)); // 0.111
System.out.println(format.format(0.1115)); // 0.112
System.out.println(format.format(0.1116)); // 0.112

format.setRoundingMode(RoundingMode.UP);
System.out.println(format.getRoundingMode()); // UP

System.out.println(format.format(0.1114)); // 0.112
System.out.println(format.format(0.1115)); // 0.112
System.out.println(format.format(0.1116)); // 0.112

format.setRoundingMode(RoundingMode.DOWN);
System.out.println(format.getRoundingMode()); // DOWN

System.out.println(format.format(0.1114)); // 0.111
System.out.println(format.format(0.1115)); // 0.111
System.out.println(format.format(0.1116)); // 0.111

int hashCode ()

hashCodeをオーバーライドします。

final var format1 = NumberFormat.getNumberInstance(Locale.US);
System.out.println(format1.hashCode()); // 423132

final var format2 = NumberFormat.getNumberInstance(Locale.JAPAN);
System.out.println(format2.hashCode()); // 423132

final var format3 = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(format3.hashCode()); // 423168

boolean isGroupingUsed ()

このフォーマットでグループ化が使用される場合に、trueを返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format = NumberFormat.getNumberInstance();
System.out.println(format.isGroupingUsed()); // true

System.out.println(format.format(1234567)); // 1,234,567

format.setGroupingUsed(false);
System.out.println(format.isGroupingUsed()); // false

System.out.println(format.format(1234567)); // 1234567

boolean isParseIntegerOnly ()

このフォーマットが数値を整数としてのみ解析する場合に、trueを返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format = NumberFormat.getNumberInstance();
System.out.println(format.isParseIntegerOnly()); // false

final var ret1 = format.parse("123");
System.out.println(ret1); // 123

final var ret2 = format.parse("4.567");
System.out.println(ret2); // 4.567

format.setParseIntegerOnly(true);
System.out.println(format.isParseIntegerOnly()); // true

final var ret3 = format.parse("4.567");
System.out.println(ret3); // 4

Number parse (String source)

指定された文字列の先頭からテキストを解析して数値を生成します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var format = NumberFormat.getNumberInstance();

final var ret1 = format.parse("123,000");
System.out.println(ret1); // 123000
System.out.println(ret1.getClass().getSimpleName()); // Long

final var ret2 = format.parse("0.123");
System.out.println(ret2); // 0.123
System.out.println(ret2.getClass().getSimpleName()); // Double
final var format = NumberFormat.getPercentInstance();

final var ret = format.parse("75%");
System.out.println(ret); // 0.75
System.out.println(ret.getClass().getSimpleName()); // Double
final var format = NumberFormat.getCompactNumberInstance();

final var ret = format.parse("10万");
System.out.println(ret); // 100000
System.out.println(ret.getClass().getSimpleName()); // Long

abstract Number parse (String source, ParsePosition parsePosition)

可能な場合([Long.MIN_VALUE, Long.MAX_VALUE]の範囲で、小数部分がない場合など)はLongを、そうでない場合はDoubleを返します。

final var format = NumberFormat.getNumberInstance(Locale.US);

final var source = "123 456";
final var pos = new ParsePosition(0);

final var ret1 = format.parse(source, pos);
System.out.println(ret1); // 123
System.out.println(pos.getIndex()); // 3

pos.setIndex(pos.getIndex() + 1);

final var ret2 = format.parse(source, pos);
System.out.println(ret2); // 456
System.out.println(pos.getIndex()); // 7

final var ret3 = format.parse(source, pos);
System.out.println(ret3); // null

final Object parseObject (String source, ParsePosition pos)

文字列からテキストを解析してNumberを生成します。

final var format = NumberFormat.getNumberInstance(Locale.US);

final var source = "123 456";
final var pos = new ParsePosition(0);

final var ret1 = format.parseObject(source, pos);
System.out.println(ret1); // 123
System.out.println(pos.getIndex()); // 3

pos.setIndex(pos.getIndex() + 1);

final var ret2 = format.parseObject(source, pos);
System.out.println(ret2); // 456
System.out.println(pos.getIndex()); // 7

final var ret3 = format.parseObject(source, pos);
System.out.println(ret3); // null

void setCurrency (Currency currency)

通貨値のフォーマット時に、この数値フォーマットが使用する通貨を設定します。

関連:getCurrency()

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var number = 1234;

final var format = NumberFormat.getCurrencyInstance();
System.out.println(format.format(number)); // ¥1,234
System.out.println(format.getCurrency()); // JPY

format.setCurrency(Currency.getInstance(Locale.US));
format.setMinimumFractionDigits(2);

System.out.println(format.format(number)); // $1,234.00
System.out.println(format.getCurrency()); // USD

void setGroupingUsed (boolean newValue)

このフォーマットでグループ化を使用するかどうかを設定します。

このメソッドの使用例は、isGroupingUsed() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void setMaximumFractionDigits (int newValue)

数値の小数部分で許可される最大桁数を設定します。maximumFractionDigitsは、minimumFractionDigits以上である必要があります。

このメソッドの使用例は、getMaximumFractionDigits() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void setMaximumIntegerDigits (int newValue)

数値の整数部分で許可される最大桁数を設定します。maximumIntegerDigitsは、minimumIntegerDigits以上である必要があります。

このメソッドの使用例は、getMaximumIntegerDigits() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void setMinimumFractionDigits (int newValue)

数値の小数部分で許可される最小桁数を設定します。minimumFractionDigitsは、maximumFractionDigits以下である必要があります。

このメソッドの使用例は、getMaximumFractionDigits() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void setMinimumIntegerDigits (int newValue)

数値の整数部分で許可される最小桁数を返します。minimumIntegerDigitsは、maximumIntegerDigits以下である必要があります。

このメソッドの使用例は、getMaximumIntegerDigits() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void setParseIntegerOnly (boolean value)

数値を整数としてのみ解析するかどうかを設定します。

このメソッドの使用例は、isParseIntegerOnly() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

void setRoundingMode (RoundingMode roundingMode)

このNumberFormatで使用されるRoundingModeを設定します。

このメソッドの使用例は、getRoundingMode() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Formatで宣言されたメソッド

format, formatToCharacterIterator, parseObject

Java API 使用例 : Format」をご参照ください。


関連記事

国際化対応

数値

ページの先頭へ