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」をご参照ください。
関連記事
国際化対応
数値