モジュール java.base
パッケージ java.text

クラスCompactNumberFormat

java.lang.Object
java.text.Format
java.text.NumberFormat
java.text.CompactNumberFormat
すべての実装されたインタフェース:
Serializable, Cloneable

public final class CompactNumberFormat extends NumberFormat

CompactNumberFormatは、コンパクト形式で小数を書式設定するNumberFormatの具体的なサブクラスです。 コンパクト数値書式設定は、スペースが限られている環境では設計され、その限られたスペースに書式設定された文字列を表示できます。 これは、「コンパクト数値書式設定」のLDML仕様で定義されています。 コンパクト数値書式設定とは、特定のロケールに用意されているパターンに基づいて、短い形式で数値を表現することです。

例えば:
US localeでは、1000"1K"として書式設定でき、1000000styleに応じて"1M"として書式設定できます。

"hi_IN"のロケールでは、1000は"1 हज़ार"としてフォーマットでき、50000000は"5 क."としてフォーマットできます。これは、styleに応じて異なります。

ロケールのCompactNumberFormatを取得するには、NumberFormatによって提供されているファクトリ・メソッドのいずれかを使用して、完全な数値書式設定を行います。 例: NumberFormat.getCompactNumberInstance(Locale, Style)

NumberFormat fmt = NumberFormat.getCompactNumberInstance(
                            Locale.forLanguageTag("hi-IN"), NumberFormat.Style.SHORT);
String result = fmt.format(1000);

Style

数値は、SHORTLONGという2つの異なるスタイルを使用してコンパクト形式で書式設定できます。 SHORTまたはLONGコンパクト形式で数値をフォーマットおよび解析するためにNumberFormat.getCompactNumberInstance(Locale, Style)を使用します。指定したStyleパラメータが目的の形式をリクエストします。 US localeSHORTスタイル・コンパクト数値インスタンスは、"10K"として10000をフォーマットします。 ただし、LONGスタイルのインスタンスは、"10 thousand"と同じロケール形式10000です。

コンパクト数値パターン

コンパクト数値のパターンは一連のパターンで表され、各パターンは、数値の範囲を書式設定するのに使用されます。 US localeSHORTスタイル・コンパクト数値パターンは、{"", "", "", "0K", "00K", "000K", "0M", "00M", "000M", "0B", "00B", "000B", "0T", "00T", "000T"}で、100から1014の範囲です。 パターンはいくつでも作成でき、厳密には100の範囲から開始するインデックスに基づいています。 たとえば、前述のパターンでは、インデックス3 ("0K")のパターンがnumber >= 1000 and number < 10000の書式設定に使用され、インデックス4 ("00K")のパターンがnumber >= 10000 and number < 100000の書式設定に使用されます。 ほとんどのロケールで、100-102の範囲パターンで空の文字列であり、暗黙的に特殊なパターン"0"を意味します。 特殊パターン"0"は、コンパクト・パターンが含まれていない範囲で使用されます。 この特殊なパターンは、特定の範囲に対して明示的に指定したり、空の文字列のデフォルト・パターンとみなすことができます。

コンパクト・パターンには、"0K;-0K"のように、サブパターンの境界文字';' (U+003B)によって区切られた、プラスおよびマイナスのサブパターンが含まれます。 各サブパターンには、プレフィクス、最小整数桁およびサフィクスが含まれます。 マイナスのサブパターンはオプションです。このサブパターンがない場合、プラスのサブパターンの先頭にマイナス記号('-' U+002D HYPHEN-MINUS)が付きます。 つまり、"0K"単独は"0K;-0K"と同等です。 明示的にマイナスのサブパターンを指定した場合、このサブパターンは単にマイナスのプリフィクスとサフィックスを指定するために使用されます。 最小整数桁数およびその他の特性は、すべてプラス・パターンと同じです。 つまり、"0K;-00K"では"0K;-0K"と正確に同じ動作が生成されます。

コンパクト・パターンの多くの文字は文字どおりに使用され、解析中に照合され、書式設定中は変更されません。 「特殊文字」は、一方、その他の文字、文字列またはクラスを表す文字です。 特に明記されていない場合は、先頭またはサフィクスにリテラルとして表示されるときには、一重引用符' (U+0027)を使用して引用符を囲む必要があります。 たとえば、0क'.'。

複数形

一部のローカリゼーションでは、複数形のパターンが異なることが必要です。各単数形および複数形のパターンを、中カッコ'{' (U+007B)'}' (U+007D)のペアの中でスペース' ' (U+0020)で区切って列挙できます。 このフォーマットを使用する場合は、各パターンをcountの前に追加し、その後に1つのコロン':' (U+003A)を続ける必要があります。 パターンにスペースが含まれる場合は、引用符で囲む必要があります。

たとえば、ドイツ語ロケールで百万を表すコンパクトな数値パターンを"{one:0' 'Million other:0' 'Millionen}"として指定できます。 countはLDML 「言語複数ルール」に従います。

コンパクト・パターンには、次の構文があります:

 Pattern:
         SimplePattern
         '{' PluralPattern [' ' PluralPattern]optional '}'
 SimplePattern:
         PositivePattern
         PositivePattern [; NegativePattern]optional
 PluralPattern:
         Count:SimplePattern
 Count:
         "zero" / "one" / "two" / "few" / "many" / "other"
 PositivePattern:
         Prefixoptional MinimumInteger Suffixoptional
 NegativePattern:
        Prefixoptional MinimumInteger Suffixoptional
 Prefix:
      Any characters except the special pattern characters
 Suffix:
      Any characters except the special pattern characters
 MinimumInteger:
      0
      0 MinimumInteger
 

書式設定

デフォルトの書式設定動作は、小数を持たない書式設定された文字列を返しますが、ユーザーはsetMinimumFractionDigits(int)メソッドを使用して小数部分を含めることができます。 数値1000.0または1000は、(US localeの) "1K"として("1.00K"ではなく)書式設定されます。 このため、書式設定用に指定するパターンには、最小整数桁、プレフィクスまたはサフィクスのみが含まれますが、小数部は含まれません。 たとえば、使用されるパターンは{"", "", "", 0K, 00K, ...}です。 数値を書式設定するために選択したパターンが"0" (特殊パターン)の場合は、指定したロケールに関してDecimalFormatによって提供される一般的な数値書式設定が使用されます。

解析

デフォルトの解析動作では、グループ化セパレータは、setGroupingUsed(boolean)を使用してtrueに設定されるまでグループ化できません。 小数部分の解析は、isParseIntegerOnly()によって異なります。 たとえば、解析整数のみがtrueに設定されている場合、小数部分はスキップされます。

丸め

CompactNumberFormatには、RoundingModeで定義されたフォーマット用の丸めモードがあります。 デフォルトでは、RoundingMode.HALF_EVENが使用されます。
導入されたバージョン:
12
外部仕様
関連項目: