Класс CompactNumberFormat
- Все реализованные интерфейсы:
-
Serializable,Cloneable
public final class CompactNumberFormat extends NumberFormat
Класс US locale — конкретный подкласс NumberFormat, форматирующий десятичное число в компактной форме. Компактное форматирование чисел предназначено для сред, где пространство ограничено, и отформатированная строка может отображаться в этом ограниченном пространстве. Оно определяется спецификацией LDML для компактных форматов чисел. Компактное форматирование чисел относится к представлению числа в более короткой форме, основанной на шаблонах, предоставленных для данного языка и региона.
Например:
В US locale, число 1000 может быть отформатировано как "1K", а число 1000000 — как "1M", в зависимости от используемого стиля.
В языке и регионе "hi_IN", число 1000 может быть отформатировано как "1 हà¤à¤¼à¤¾à¤°", а число 50000000 — как "5 à¤.", в зависимости от используемого стиля.
Чтобы получить экземпляр CompactNumberFormat для определенного региона, используйте один из фабричных методов, предоставленных классом NumberFormat для компактного форматирования чисел. Например, NumberFormat.getCompactNumberInstance(Locale, Style).
NumberFormat fmt = NumberFormat.getCompactNumberInstance(
new Locale("hi", "IN"), NumberFormat.Style.SHORT);
String result = fmt.format(1000);
Стиль
Число можно отформатировать в компактной форме с помощью двух различных стилей: SHORT и LONG. Используйте NumberFormat.getCompactNumberInstance(Locale, Style) для форматирования и разбора числа в SHORT или LONG компактной форме, где переданный параметр Style указывает требуемый формат. Экземпляр SHORT компактного числа в US locale форматирует 10000 как "10K". Однако, экземпляр LONG стиля в том же регионе форматирует 10000 как "10 thousand".
Шаблоны компактных чисел
Шаблоны компактных чисел представлены серией шаблонов, где каждый шаблон используется для форматирования диапазона чисел. Пример шаблонов SHORT компактных чисел для US locale — {"", "", "", "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" используется для любого диапазона, не содержащего компактный шаблон. Этот специальный шаблон может быть указан явно для любого конкретного диапазона или рассматривается как шаблон по умолчанию для пустой строки.
Компактный шаблон содержит положительный и отрицательный подшаблон, разделенные символом границы подшаблона ';' (U+003B), например, "0K;-0K". Каждый подшаблон имеет префикс, минимальное количество целых цифр и суффикс. Отрицательный подшаблон является необязательным; если его нет, то положительный подшаблон с префиксом минус ('-' U+002D HYPHEN-MINUS) используется в качестве отрицательного подшаблона. То есть, "0K" эквивалентно "0K;-0K". Если есть явный отрицательный подшаблон, он служит только для указания отрицательного префикса и суффикса. Количество минимальных целых цифр и другие характеристики остаются такими же, как у положительного шаблона. Это означает, что "0K;-00K" производит точно такой же результат, что и "0K;-0K".
Многие символы в компактном шаблоне интерпретируются буквально; они сопоставляются во время разбора и остаются неизменными при форматировании. Специальные символы, с другой стороны, представляют собой другие символы, строки или классы символов. Они должны быть заключены в одинарные кавычки ' (U+0027), если они должны отображаться в префиксе или суффиксе как литералы. Например, 0à¤'.'.
Множественное число
В тех случаях, когда некоторые языки требуют, чтобы компактные шаблоны чисел были разными для множественных чисел, каждый одиночный и множественный шаблон может быть перечислен в паре фигурных скобок '{' (U+007B) и '}' (U+007D), разделенных пробелом ' ' (U+0020). Если используется этот формат, каждый шаблон должен быть дополнен его count, за которым следует двоеточие ':' (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 Unicode characters except \uFFFE, \uFFFF, and
special characters.
Suffix:
Any Unicode characters except \uFFFE, \uFFFF, and
special characters.
MinimumInteger:
0
0 MinimumInteger
Форматирование
По умолчанию форматирование возвращает отформатированную строку без дробной части, но пользователи могут использовать методsetMinimumFractionDigits(int), чтобы включить дробную часть. Число 1000.0 или 1000 форматируется как "1K", а не "1.00K" (в US locale). По этой причине шаблоны, предоставленные для форматирования, содержат только минимальное количество целых цифр, префикс и/или суффикс, но не дробную часть. Например, используемые шаблоны — {"", "", "", 0K, 00K, ...}. Если выбранный для форматирования шаблон числа является "0" (специальный шаблон), явным или по умолчанию, то используется общее форматирование чисел, предоставляемое классом DecimalFormat для указанного языка и региона. Разбор
По умолчанию разбор не допускает разделитель групп до тех пор, пока разделитель групп не будет установлен вtrue с помощью метода setGroupingUsed(boolean). Разбор дробной части зависит от метода isParseIntegerOnly(). Например, если разбор только целых чисел установлен в true, то дробная часть пропускается. Округление
CompactNumberFormat предоставляет режимы округления, определенные в RoundingMode, для форматирования. По умолчанию используется режим RoundingMode.HALF_EVEN.- С:
- 12
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе java.text.NumberFormat
NumberFormat.Field, NumberFormat.Style
Краткое описание полей
Поля, объявленные в классе java.text.NumberFormat
FRACTION_FIELD, INTEGER_FIELD
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
CompactNumberFormat |
Создаёт CompactNumberFormat с использованием заданного десятичного шаблона, символов десятичного формата и компактных шаблонов. |
CompactNumberFormat |
Создаёт CompactNumberFormat с использованием заданного десятичного шаблона, символов десятичного формата, компактных шаблонов и правил множественного числа. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
CompactNumberFormat |
clone() |
Создаёт и возвращает копию экземпляра этого CompactNumberFormat. |
boolean |
equals |
Проверяет, равен ли этот CompactNumberFormat заданному obj. |
StringBuffer |
format |
Форматирует double, чтобы получить строку, представляющую его компактную форму. |
StringBuffer |
format |
Форматирует long, чтобы получить строку, представляющую его компактную форму. |
final StringBuffer |
format |
Форматирует число, чтобы получить строку, представляющую его компактную форму. |
AttributedCharacterIterator |
formatToCharacterIterator |
Форматирует объект, создавая AttributedCharacterIterator. |
int |
getGroupingSize() |
Возвращает размер группировки. |
RoundingMode |
getRoundingMode() |
Получает RoundingMode, используемый в этом CompactNumberFormat. |
int |
hashCode() |
Возвращает хэш-код для этого экземпляра CompactNumberFormat. |
boolean |
isGroupingUsed() |
Возвращает true, если группировка используется в этом формате. |
boolean |
isParseBigDecimal() |
Возвращает true, если метод parse(String, ParsePosition) возвращает BigDecimal. |
boolean |
isParseIntegerOnly() |
Возвращает true, если этот формат анализирует только целое число из числовой части компактного числа. |
Number |
parse |
Анализирует компактное число из строки, чтобы получить Number. |
void |
setGroupingSize |
Устанавливает размер группировки. |
void |
setGroupingUsed |
Устанавливает, будет ли использоваться группировка в этом формате. |
void |
setMaximumFractionDigits |
Устанавливает максимальное количество цифр, разрешённых в дробной части числа. |
void |
setMaximumIntegerDigits |
Устанавливает максимальное количество цифр, разрешённых в целой части числа. |
void |
setMinimumFractionDigits |
Устанавливает минимальное количество цифр, разрешённых в дробной части числа. |
void |
setMinimumIntegerDigits |
Устанавливает минимальное количество цифр, разрешённых в целой части числа. |
void |
setParseBigDecimal |
Устанавливает, возвращает ли метод parse(String, ParsePosition) BigDecimal. |
void |
setParseIntegerOnly |
Устанавливает, анализирует ли этот формат только целое число из числовой части компактного числа. |
void |
setRoundingMode |
Устанавливает RoundingMode, используемый в этом CompactNumberFormat. |
Методы, объявленные в классе java.text.NumberFormat
format, format, getAvailableLocales, getCompactNumberInstance, getCompactNumberInstance, getCurrency, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getMaximumFractionDigits, getMaximumIntegerDigits, getMinimumFractionDigits, getMinimumIntegerDigits, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, parse, parseObject, setCurrency
Методы, объявленные в классе java.text.Format
format, parseObject
Подробное описание конструкторов
CompactNumberFormat
public CompactNumberFormat(String decimalPattern, DecimalFormatSymbols symbols, String[] compactPatterns)
CompactNumberFormat с использованием заданного десятичного шаблона, символов форматирования десятичных чисел и шаблонов компактного представления. Для получения экземпляра CompactNumberFormat со стандартными шаблонами компактного представления для Locale и Style рекомендуется использовать фабричные методы, предоставляемые NumberFormat для форматирования чисел компактной формой. Например, NumberFormat.getCompactNumberInstance(Locale, Style).- Параметры:
-
decimalPattern- десятичный шаблон для общего форматирования чисел -
symbols- набор символов для использования -
compactPatterns- массив шаблонов компактного представления чисел - Исключения:
-
NullPointerException- если любой из переданных аргументов имеетnullзначение -
IllegalArgumentException- если заданныйdecimalPatternили массивcompactPatternsсодержит недопустимый шаблон, или массив шаблонов компактного представления содержитnull - См. также:
CompactNumberFormat
public CompactNumberFormat(String decimalPattern, DecimalFormatSymbols symbols, String[] compactPatterns, String pluralRules)
CompactNumberFormat с использованием заданного десятичного шаблона, символов форматирования десятичных чисел, шаблонов компактного представления и правил множественного числа. Для получения экземпляра CompactNumberFormat со стандартными шаблонами компактного представления для Locale, Style и pluralRules рекомендуется использовать фабричные методы, предоставляемые NumberFormat для форматирования чисел компактной формой. Например, NumberFormat.getCompactNumberInstance(Locale, Style).- Параметры:
-
decimalPattern- десятичный шаблон для общего форматирования чисел -
symbols- набор символов для использования -
compactPatterns- массив шаблонов компактного представления чисел -
pluralRules- строка, обозначающая правила множественного числа, которые связывают ключевое словоCount, например, "one", и фактическое целое число. Его синтаксис определён в синтаксисе правил множественного числа Консорциума Unicode - Исключения:
-
NullPointerException- если любой из переданных аргументов имеетnullзначение -
IllegalArgumentException- если заданныйdecimalPattern, массивcompactPatternsсодержит недопустимый шаблон, массив шаблонов компактного представления содержитnull, или заданная строкаpluralRulesсодержит недопустимый синтаксис - С:
- 14
- См. также:
Подробное описание методов
format
public final StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition fieldPosition)
Number.- Переопределяет:
-
formatв классеNumberFormat - Параметры:
-
number- число для форматирования -
toAppendTo- буферStringBuffer, в который будет добавлен отформатированный текст -
fieldPosition- отслеживает положение поля в возвращаемой строке. Например, для форматирования числа123456789вUS locale, если заданныйfieldPositionравенNumberFormat.INTEGER_FIELD, начальный и конечный индексыfieldPositionбудут установлены соответственно в 0 и 3 для строки вывода123M. Аналогично, позиции полей префикса и суффикса можно получить, используяNumberFormat.Field.PREFIXиNumberFormat.Field.SUFFIXсоответственно. - Возвращает:
- переданный
StringBufferв качествеtoAppendTo - Исключения:
-
IllegalArgumentException- еслиnumberимеетnullзначение или не является экземпляромNumber -
NullPointerException- еслиtoAppendToилиfieldPositionимеютnullзначение -
ArithmeticException- если округление необходимо с режимом округления, установленным наRoundingMode.UNNECESSARY - См. также:
format
public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition)
- Определяет:
-
formatв классеNumberFormat - Параметры:
-
number- double число для форматирования -
result- место, куда будет добавлен текст -
fieldPosition- отслеживает положение поля в возвращаемой строке. Например, для форматирования числа1234567.89вUS locale, если заданныйfieldPositionравенNumberFormat.INTEGER_FIELD, начальный и конечный индексыfieldPositionбудут установлены соответственно в 0 и 1 для строки вывода1M. Аналогично, позиции полей префикса и суффикса можно получить, используяNumberFormat.Field.PREFIXиNumberFormat.Field.SUFFIXсоответственно. - Возвращает:
- переданный
StringBufferв качествеresult - Исключения:
-
NullPointerException- еслиresultилиfieldPositionимеютnullзначение -
ArithmeticException- если округление необходимо с режимом округления, установленным наRoundingMode.UNNECESSARY - См. также:
format
public StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition)
- Определяет:
-
formatв классеNumberFormat - Параметры:
-
number- long число для форматирования -
result- место, куда будет добавлен текст -
fieldPosition- отслеживает положение поля в возвращаемой строке. Например, для форматирования числа123456789вUS locale, если заданныйfieldPositionравенNumberFormat.INTEGER_FIELD, начальный и конечный индексыfieldPositionбудут установлены соответственно в 0 и 3 для строки вывода123M. Аналогично, позиции полей префикса и суффикса можно получить, используяNumberFormat.Field.PREFIXиNumberFormat.Field.SUFFIXсоответственно. - Возвращает:
- переданный
StringBufferв качествеresult - Исключения:
-
NullPointerException- еслиresultилиfieldPositionимеютnullзначение -
ArithmeticException- если округление необходимо с режимом округления, установленным наRoundingMode.UNNECESSARY - См. также:
formatToCharacterIterator
public AttributedCharacterIterator formatToCharacterIterator(Object obj)
AttributedCharacterIterator. Возвращённый AttributedCharacterIterator может быть использован для построения результирующей строки, а также для определения информации о результирующей строке. Каждый ключ атрибута AttributedCharacterIterator будет типа NumberFormat.Field, значение атрибута будет таким же, как и ключ атрибута. Части префикса и суффикса возвращаемого итератора (если они есть) представлены атрибутами NumberFormat.Field.PREFIX и NumberFormat.Field.SUFFIX соответственно.
- Переопределяет:
-
formatToCharacterIteratorв классеFormat - Параметры:
-
obj- Объект для форматирования - Возвращает:
AttributedCharacterIterator, описывающий отформатированное значение- Исключения:
-
NullPointerException- если obj равен null -
IllegalArgumentException- когда Формат не может отформатировать данный объект -
ArithmeticException- если округление необходимо с режимом округления, установленным наRoundingMode.UNNECESSARY
parse
public Number parse(String text, ParsePosition pos)
Number. Метод пытается распарсить текст, начиная с индекса, заданного pos. Если разбор успешен, индекс pos обновляется до индекса после последнего используемого символа (разбор не обязательно использует все символы до конца строки), и возвращается распарсенное число. Обновлённый pos может быть использован для указания стартовой точки для следующего вызова этого метода. Если произошла ошибка, индекс pos не изменяется, индекс ошибки pos устанавливается в индекс символа, где произошла ошибка, и возвращается null.
Значение — это числовая часть в заданном тексте, умноженная на числовое значение присоединённого аффикса (например, "К" = 1000 в US locale). Возвращаемый подкласс зависит от значения isParseBigDecimal().
- Если
isParseBigDecimal()ложно (по умолчанию), большинство целых значений возвращаются какLongобъекты, независимо от их записи:"17K"и"17.000K"оба парсятся вLong.valueOf(17000). Если значение не помещается вLong, то результат возвращается какDouble. Это включает значения с дробной частью, бесконечные значения,NaNи значение -0.0.Звонящие приложения могут использовать методы
NumberdoubleValue,longValueи т. д. для получения нужного типа. - Если
isParseBigDecimal()истинно, значения возвращаются какBigDecimalобъекты. Особые случаи отрицательной и положительной бесконечности и NaN возвращаются какDoubleэкземпляры, содержащие значения соответствующихDoubleконстант.
CompactNumberFormat парсит все символы Unicode, которые представляют десятичные цифры, как определено в Character.digit(). Кроме того, CompactNumberFormat также распознаёт в качестве цифр десять последовательных символов, начиная с локальной цифры ноль, определённой в объекте DecimalFormatSymbols.
CompactNumberFormat parse не допускает разбора научной записи. Например, разбор строки "1.05E4K" в US locale прерывается на символе 'E' и возвращает 1.05.
- Specified by:
-
parsein classNumberFormat - Parameters:
-
text- строка для парсинга -
pos- объектParsePositionс информацией об индексе и индексе ошибки, как описано выше - Returns:
- распарсенное значение или
null, если разбор не удался - Throws:
-
NullPointerException- еслиtextилиposравно null - See Also:
setMaximumIntegerDigits
public void setMaximumIntegerDigits(int newValue)
newValue > 309, то максимальное количество цифр целой части устанавливается в 309. Отрицательные входные значения заменяются на 0.- Overrides:
-
setMaximumIntegerDigitsin classNumberFormat - Parameters:
-
newValue- максимальное количество цифр целой части - See Also:
setMinimumIntegerDigits
public void setMinimumIntegerDigits(int newValue)
newValue > 309, то минимальное количество цифр целой части устанавливается в 309. Отрицательные входные значения заменяются на 0.- Overrides:
-
setMinimumIntegerDigitsin classNumberFormat - Parameters:
-
newValue- минимальное количество цифр целой части - See Also:
setMinimumFractionDigits
public void setMinimumFractionDigits(int newValue)
newValue > 340, то минимальное количество цифр дробной части устанавливается в 340. Отрицательные входные значения заменяются на 0.- Overrides:
-
setMinimumFractionDigitsin classNumberFormat - Parameters:
-
newValue- минимальное количество цифр дробной части - See Also:
setMaximumFractionDigits
public void setMaximumFractionDigits(int newValue)
newValue > 340, то максимальное количество цифр дробной части устанавливается в 340. Отрицательные входные значения заменяются на 0.- Overrides:
-
setMaximumFractionDigitsin classNumberFormat - Parameters:
-
newValue- максимальное количество цифр дробной части - See Also:
getRoundingMode
public RoundingMode getRoundingMode()
RoundingMode в этом CompactNumberFormat.- Overrides:
-
getRoundingModein classNumberFormat - Returns:
- используемый
RoundingModeдля этогоCompactNumberFormat - See Also:
setRoundingMode
public void setRoundingMode(RoundingMode roundingMode)
RoundingMode в этом CompactNumberFormat.- Overrides:
-
setRoundingModein classNumberFormat - Parameters:
-
roundingMode- используемыйRoundingMode - Throws:
-
NullPointerException- еслиroundingModeравенnull - See Also:
getGroupingSize
public int getGroupingSize()
"12,347 trillion" для US locale размер группировки равен 3.- Returns:
- размер группировки
- See Also:
setGroupingSize
public void setGroupingSize(int newValue)
"12,347 trillion" для US locale размер группировки равен 3. Размер группировки должен быть больше или равен нулю и меньше или равен 127.- Parameters:
-
newValue- новый размер группировки - Throws:
-
IllegalArgumentException- еслиnewValueотрицательный или больше 127 - See Also:
isGroupingUsed
public boolean isGroupingUsed()
12346567890987654 может быть отформатировано как "12,347 trillion" в US locale. Разделитель группировки зависит от локали.- Overrides:
-
isGroupingUsedin classNumberFormat - Returns:
-
true, если группировка используется;falseв противном случае - See Also:
setGroupingUsed
public void setGroupingUsed(boolean newValue)
- Overrides:
-
setGroupingUsedin classNumberFormat - Parameters:
-
newValue-true, если группировка используется;falseв противном случае - See Also:
isParseIntegerOnly
public boolean isParseIntegerOnly()
US locale, если этот метод возвращает true, строка "1234.78 thousand" будет обработана как значение 1234000 (1234 (целая часть) * 1000 (тысяча)) и дробная часть будет пропущена. Точный формат, принимаемый операцией анализа, зависит от локали.- Overrides:
-
isParseIntegerOnlyв классеNumberFormat - Returns:
-
true, если компактные числа должны анализироваться только как целые числа;falseв противном случае
setParseIntegerOnly
public void setParseIntegerOnly(boolean value)
- Overrides:
-
setParseIntegerOnlyв классеNumberFormat - Parameters:
-
value-true, если компактные числа должны анализироваться только как целые числа;falseв противном случае - See Also:
isParseBigDecimal
public boolean isParseBigDecimal()
parse(String, ParsePosition) BigDecimal. Значение по умолчанию — false.- Returns:
-
true, если метод анализа возвращает BigDecimal;falseв противном случае - See Also:
setParseBigDecimal
public void setParseBigDecimal(boolean newValue)
parse(String, ParsePosition) BigDecimal.- Parameters:
-
newValue-true, если метод анализа возвращает BigDecimal;falseв противном случае - See Also:
equals
public boolean equals(Object obj)
CompactNumberFormat заданному obj. Объекты типа CompactNumberFormat сравниваются, другие типы возвращают false; соблюдает общий контракт Object.equals.- Overrides:
-
equalsв классеNumberFormat - Parameters:
-
obj- объект для сравнения - Returns:
- true, если этот объект равен другому
CompactNumberFormat - See Also:
hashCode
public int hashCode()
CompactNumberFormat.- Overrides:
-
hashCodeв классеNumberFormat - Returns:
- хеш-код для этого
CompactNumberFormat - See Also:
clone
public CompactNumberFormat clone()
CompactNumberFormat.- Overrides:
-
cloneв классеNumberFormat - Returns:
- клонированный экземпляр
- See Also:
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/text/CompactNumberFormat.html