Java : DecimalFormat - API使用例

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


概要

DecimalFormatはNumberFormatの具象サブクラスであり、10進数の書式を設定します。 これには、西欧、アラビア、およびインド数字に対するサポートを含むさまざまな機能が用意されており、任意のロケールで数値の解析とフォーマットが実行できるよう設計されています。

クラス構成

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

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

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

となります。

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

DecimalFormat のインスタンス生成には、NumberFormat

  • getNumberInstance
  • getPercentInstance
  • getCurrencyInstance

メソッドを用途に合わせて使います。

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

final var format = NumberFormat.getNumberInstance();
System.out.println(format.getClass().getSimpleName()); // DecimalFormat

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.getClass().getSimpleName()); // DecimalFormat
System.out.println(format1.format(number)); // ¥1,234

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

NumberFormatで宣言されたフィールド

FRACTION_FIELD, INTEGER_FIELD

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

コンストラクタ

DecimalFormat ()

デフォルトのFORMATロケールに対して、デフォルトのパターンと記号を使ってDecimalFormatを作成します。

final var format = new DecimalFormat();
System.out.println(format.toPattern()); // #,##0.###

System.out.println(format.format(1234000)); // 1,234,000
System.out.println(format.format(-5678)); // -5,678
System.out.println(format.format(0.12345)); // 0.123

DecimalFormat (String pattern)

デフォルトのFORMATロケールに対して、指定されたパターンと記号を使ってDecimalFormatを作成します。

final var format = new DecimalFormat("#,##0.0##");
System.out.println(format.toPattern()); // #,##0.0##

System.out.println(format.format(1234)); // 1,234.0
System.out.println(format.format(-5678)); // -5,678.0
System.out.println(format.format(0.12345)); // 0.123

DecimalFormat (String pattern, DecimalFormatSymbols symbols)

指定されたパターンと記号を使ってDecimalFormatを作成します。

final var pattern = "#,##0.###";

final var format1 = new DecimalFormat(pattern, DecimalFormatSymbols.getInstance(Locale.US));
System.out.println(format1.toLocalizedPattern()); // #,##0.###

System.out.println(format1.format(123000)); // 123,000
System.out.println(format1.format(0.456)); // 0.456

final var format2 = new DecimalFormat(pattern, DecimalFormatSymbols.getInstance(Locale.GERMANY));
System.out.println(format2.toLocalizedPattern()); // #.##0,###

System.out.println(format2.format(123000)); // 123.000
System.out.println(format2.format(0.456)); // 0,456

メソッド

void applyLocalizedPattern (String pattern)

指定されたパターンをこのFormatオブジェクトに適用します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = 1234;

    System.out.println(format.toLocalizedPattern()); // #,##0.###
    System.out.println(format.format(number)); // 1,234

    format.applyLocalizedPattern("#,##0.0##");

    System.out.println(format.toLocalizedPattern()); // #,##0.0##
    System.out.println(format.format(number)); // 1,234.0
}

if (NumberFormat.getNumberInstance(Locale.GERMANY) instanceof DecimalFormat format) {

    final var number = 1234;

    System.out.println(format.toLocalizedPattern()); // #.##0,###
    System.out.println(format.format(number)); // 1.234

    format.applyLocalizedPattern("#.##0,0##");

    System.out.println(format.toLocalizedPattern()); // #.##0,0##
    System.out.println(format.format(number)); // 1.234,0
}

void applyPattern (String pattern)

指定されたパターンをこのFormatオブジェクトに適用します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = 1234;

    System.out.println(format.toPattern()); // #,##0.###
    System.out.println(format.format(number)); // 1,234

    format.applyPattern("#,##0.0##");

    System.out.println(format.toPattern()); // #,##0.0##
    System.out.println(format.format(number)); // 1,234.0
}

if (NumberFormat.getNumberInstance(Locale.GERMANY) instanceof DecimalFormat format) {

    final var number = 1234;

    System.out.println(format.toPattern()); // #,##0.###
    System.out.println(format.format(number)); // 1.234

    format.applyPattern("#,##0.0##");

    System.out.println(format.toPattern()); // #,##0.0##
    System.out.println(format.format(number)); // 1.234,0
}

Object clone ()

標準オーバーライドです。セマンティックスは変わりません。

final var format = new DecimalFormat();
System.out.println(format.toPattern()); // #,##0.###

if (format.clone() instanceof DecimalFormat cloned) {
    System.out.println(cloned.toPattern()); // #,##0.###
    System.out.println(cloned.equals(format)); // true
}

boolean equals (Object obj)

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

final var format1 = new DecimalFormat("#0.###");
final var format2 = new DecimalFormat("#0.###");
final var format3 = new DecimalFormat("#0.0##");

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

StringBuffer format (double number, StringBuffer result, FieldPosition fieldPosition)

doubleをフォーマットして文字列を作成します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = 123.456;
    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
    }
}

StringBuffer format (long number, StringBuffer result, FieldPosition fieldPosition)

longをフォーマットして文字列を作成します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    format.setMinimumFractionDigits(3);

    final var number = 123L;
    System.out.println(format.format(number)); // 123.000

    {
        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.000

        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.000

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

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

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

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    format.setMinimumFractionDigits(3);

    final var number = new BigInteger("123");
    System.out.println(format.format(number)); // 123.000

    {
        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.000

        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.000

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

AttributedCharacterIterator formatToCharacterIterator (Object obj)

Objectをフォーマットし、AttributedCharacterIteratorを生成します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var num = 123;
    System.out.println(format.format(num)); // 123

    final var it = format.formatToCharacterIterator(num);

    System.out.println("-- iterator --");
    for (char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
        System.out.println(c);
    }

    // 結果
    // ↓
    //-- iterator --
    //1
    //2
    //3
}

Currency getCurrency ()

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

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

if (NumberFormat.getCurrencyInstance() instanceof DecimalFormat format) {

    final var number = 1234;

    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
}

DecimalFormatSymbols getDecimalFormatSymbols ()

数値桁区切り文字のコピーを返します。これは通常、プログラマやユーザーによって変更されません。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = 1234.56;

    final var ret1 = format.getDecimalFormatSymbols();
    System.out.println(ret1.getDecimalSeparator()); // .
    System.out.println(ret1.getGroupingSeparator()); // ,
    System.out.println(format.format(number)); // 1,234.56

    format.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.GERMANY));

    final var ret2 = format.getDecimalFormatSymbols();
    System.out.println(ret2.getDecimalSeparator()); // ,
    System.out.println(ret2.getGroupingSeparator()); // .
    System.out.println(format.format(number)); // 1.234,56
}

int getGroupingSize ()

グループ化サイズを返します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var num = 123000;

    System.out.println(format.getGroupingSize()); // 3
    System.out.println(format.format(num)); // 123,000

    format.setGroupingSize(0);

    System.out.println(format.getGroupingSize()); // 0
    System.out.println(format.format(num)); // 123000
}

int getMaximumFractionDigits ()

数値の小数部分の最大桁数を取得します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    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 ()

数値の整数部分の最大桁数を取得します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    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使用例をご参照ください。

int getMultiplier ()

パーセント、パーミル(1000)、およびその類似フォーマットで使用する乗数を取得します。

if (NumberFormat.getPercentInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = 0.75;

    System.out.println(format.getMultiplier()); // 100
    System.out.println(format.format(number)); // 75%

    format.setMultiplier(1000);

    System.out.println(format.getMultiplier()); // 1000
    System.out.println(format.format(number)); // 750%
}

String getNegativePrefix ()

負の接頭辞を取得します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = -123;

    System.out.println(format.getNegativePrefix()); // -
    System.out.println(format.format(number)); // -123

    format.setNegativePrefix("Negative : ");

    System.out.println(format.getNegativePrefix()); // Negative :
    System.out.println(format.format(number)); // Negative : 123
}

String getNegativeSuffix ()

負の接尾辞を取得します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = -123;

    System.out.println(format.getNegativeSuffix().isEmpty()); // true
    System.out.println(format.format(number)); // -123

    format.setNegativeSuffix(" : Negative");

    System.out.println(format.getNegativeSuffix()); //  : Negative
    System.out.println(format.format(number)); // -123 : Negative
}

String getPositivePrefix ()

正の接頭辞を取得します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = 123;

    System.out.println(format.getPositivePrefix().isEmpty()); // true
    System.out.println(format.format(number)); // 123

    format.setPositivePrefix("Positive : ");

    System.out.println(format.getPositivePrefix()); // Positive :
    System.out.println(format.format(number)); // Positive : 123
}

String getPositiveSuffix ()

正の接尾辞を取得します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var number = 123;

    System.out.println(format.getPositiveSuffix().isEmpty()); // true
    System.out.println(format.format(number)); // 123

    format.setPositiveSuffix(" : Positive");

    System.out.println(format.getPositiveSuffix()); //  : Positive
    System.out.println(format.format(number)); // 123 : Positive
}

RoundingMode getRoundingMode ()

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

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    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をオーバーライドします。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {
    System.out.println(format.hashCode()); // 423132
}

if (NumberFormat.getCurrencyInstance(Locale.US) instanceof DecimalFormat format) {
    System.out.println(format.hashCode()); // 423168
}

boolean isDecimalSeparatorAlwaysShown ()

整数と区別する小数点の動作を取得します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    System.out.println(format.isDecimalSeparatorAlwaysShown()); // false
    System.out.println(format.format(1234)); // 1,234

    format.setDecimalSeparatorAlwaysShown(true);

    System.out.println(format.isDecimalSeparatorAlwaysShown()); // true
    System.out.println(format.format(1234)); // 1,234.
}

boolean isParseBigDecimal ()

parse(java.lang.String, java.text.ParsePosition)メソッドがBigDecimalを返すかどうかを返します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    final var text = "12345678900000000000";

    System.out.println(format.isParseBigDecimal()); // false

    final var num1 = format.parse(text);
    System.out.println(num1); // 1.23456789E19
    System.out.println(num1.getClass().getSimpleName()); // Double

    format.setParseBigDecimal(true);
    System.out.println(format.isParseBigDecimal()); // true

    final var num2 = format.parse(text);
    System.out.println(num2); // 12345678900000000000
    System.out.println(num2.getClass().getSimpleName()); // BigDecimal
}

Number parse (String text, ParsePosition pos)

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

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    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
}

void setCurrency (Currency currency)

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

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

void setDecimalFormatSymbols (DecimalFormatSymbols newSymbols)

数値桁区切り文字を設定します。これは通常、プログラマやユーザーによって変更されません。

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

void setDecimalSeparatorAlwaysShown (boolean newValue)

整数と区別する小数点の動作を設定します。

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

void setGroupingSize (int newValue)

グループ化サイズを設定します。

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

void setMaximumFractionDigits (int newValue)

数値の小数部分の最大桁数を設定します。

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

void setMaximumIntegerDigits (int newValue)

数値の整数部分の最大桁数を設定します。

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

void setMinimumFractionDigits (int newValue)

数値の小数部分の最小桁数を設定します。

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

void setMinimumIntegerDigits (int newValue)

数値の整数部分の最小桁数を設定します。

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

void setMultiplier (int newValue)

パーセント、パーミル(1000)、およびその類似フォーマットで使用する乗数を設定します。

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

void setNegativePrefix (String newValue)

負の接頭辞を設定します。

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

void setNegativeSuffix (String newValue)

負の接尾辞を設定します。

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

void setParseBigDecimal (boolean newValue)

parse(java.lang.String, java.text.ParsePosition)メソッドがBigDecimalを返すかどうかを設定します。

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

void setPositivePrefix (String newValue)

正の接頭辞を設定します。

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

void setPositiveSuffix (String newValue)

正の接尾辞を設定します。

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

void setRoundingMode (RoundingMode roundingMode)

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

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

String toLocalizedPattern ()

このFormatオブジェクトの現在の状態を表すローカライズされたパターン文字列を総合します。

if (NumberFormat.getNumberInstance(Locale.US) instanceof DecimalFormat format) {

    System.out.println(format.toPattern()); // #,##0.###
    System.out.println(format.toLocalizedPattern()); // #,##0.###

    System.out.println(format.format(123000)); // 123,000
    System.out.println(format.format(0.456)); // 0.456
}

if (NumberFormat.getNumberInstance(Locale.GERMANY) instanceof DecimalFormat format) {

    System.out.println(format.toPattern()); // #,##0.###
    System.out.println(format.toLocalizedPattern()); // #.##0,###

    System.out.println(format.format(123000)); // 123.000
    System.out.println(format.format(0.456)); // 0,456
}

String toPattern ()

このFormatオブジェクトの現在の状態を表すパターン文字列を総合します。

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

NumberFormatで宣言されたメソッド

format, format, getAvailableLocales, getCompactNumberInstance, getCompactNumberInstance, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, isGroupingUsed, isParseIntegerOnly, parse, parseObject, setGroupingUsed, setParseIntegerOnly

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

Formatで宣言されたメソッド

format, parseObject

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


関連記事

国際化対応

数値

ページの先頭へ