Spec-Zone.ru › OpenJDK 24

Класс DecimalFormat

java.lang.Object
java.text.Format
java.text.NumberFormat
java.text.DecimalFormat
Все реализованные интерфейсы:
Serializable, Cloneable
public class DecimalFormat extends NumberFormat
DecimalFormat — это конкретный подкласс NumberFormat, который форматирует десятичные числа в соответствии с локальными настройками. Он обладает различными функциями, предназначенными для форматирования и парсинга чисел в любой локали, включая поддержку западных, арабских и индийских цифр. Также он поддерживает различные типы чисел, включая целые числа (123), числа с фиксированной точкой (123,4), научную запись (1,23E4), проценты (12%) и денежные суммы ($123).

Получение DecimalFormat

Для получения стандартного десятичного формата для определённой локали, включая локаль по умолчанию, рекомендуется вызвать один из NumberFormat factory methods, такой как NumberFormat.getInstance(). Эти фабричные методы не всегда возвращают DecimalFormat в зависимости от реализации поставщика локальных сервисов. Таким образом, чтобы использовать метод экземпляра, определенный DecimalFormat, возвращаемый фабричным методом объект должен быть проверен на тип перед приведением к DecimalFormat. Если установленная локализованная реализация сервиса не поддерживает заданную Locale, будет обработана цепочка родительских локалей, и будет использован поддерживаемый Locale.

Если фабричные методы нежелательны, используйте один из конструкторов, например, DecimalFormat(String pattern). Подробности об параметре pattern см. в разделе Pattern.

Использование DecimalFormat

Ниже пример форматирования и парсинга:
NumberFormat nFmt = NumberFormat.getCurrencyInstance(Locale.US);
if (nFmt instanceof DecimalFormat dFmt) {
    // pattern match to DecimalFormat to use setPositiveSuffix(String)
    dFmt.setPositiveSuffix(" dollars");
    dFmt.format(100000); // returns "$100,000.00 dollars"
    dFmt.parse("$100,000.00 dollars"); // returns 100000
}

Форматирование и парсинг

Округление

При форматировании, DecimalFormat может настроить округление с помощью setRoundingMode(RoundingMode). По умолчанию используется RoundingMode.HALF_EVEN.

Цифры

При форматировании, DecimalFormat использует десять последовательных символов, начиная с локализованной нулевой цифры, определенной в объекте DecimalFormatSymbols, как цифры.

При парсинге распознаются эти цифры, а также все десятичные цифры Юникода, определённые Character.digit.

Пределы цифр целой и дробной части

Требования к реализации:
При форматировании Number, отличного от BigInteger и BigDecimal, 309 используется как верхний предел для целых цифр, а 340 — как верхний предел для дробных цифр. Это происходит даже в том случае, если один из методов-геттеров DecimalFormat, например, getMinimumFractionDigits(), возвращает численно большее значение.

Особые значения

  • Не число (NaN) форматируется как строка, которая обычно задаётся как "NaN". Эта строка определяется с помощью DecimalFormatSymbols.getNaN(). Это единственное значение, для которого префиксы и суффиксы не добавляются.

  • Бесконечность форматируется как строка, которая обычно задаётся как "∞" (U+221E), с прикреплёнными положительными или отрицательными префиксами и суффиксами. Эта строка определяется с помощью DecimalFormatSymbols.getInfinity().

  • Отрицательный ноль ("-0") парсится как

    • BigDecimal(0), если isParseBigDecimal() равно true
    • Long(0), если isParseBigDecimal() равно false и isParseIntegerOnly() равно true
    • Double(-0.0), если оба isParseBigDecimal() и isParseIntegerOnly() равны false

Синхронизация

Форматы чисел обычно не синхронизированы. Рекомендуется создавать отдельные экземпляры формата для каждого потока. Если несколько потоков одновременно обращаются к формату, он должен быть синхронизирован внешним образом.

Шаблон DecimalFormat

DecimalFormat включает в себя шаблон и набор символов. Шаблон может быть задан напрямую с помощью applyPattern() или косвенно с помощью различных методов API. Символы хранятся в объекте DecimalFormatSymbols. При использовании методов-фабрик NumberFormat шаблон и символы создаются из реализации сервиса, чувствительной к локали, установленной в системе.

Шаблоны DecimalFormat имеют следующий синтаксис:

 Pattern:
         PositivePattern
         PositivePattern ; NegativePattern
 PositivePattern:
         Prefixopt Number Suffixopt
 NegativePattern:
         Prefixopt Number Suffixopt
 Prefix:
         Any characters except the special pattern characters
 Suffix:
         Any characters except the special pattern characters
 Number:
         Integer Exponentopt
         Integer . Fraction Exponentopt
 Integer:
         MinimumInteger
         #
         # Integer
         # , Integer
 MinimumInteger:
         0
         0 MinimumInteger
         0 , MinimumInteger
 Fraction:
         MinimumFractionopt OptionalFractionopt
 MinimumFraction:
         0 MinimumFractionopt
 OptionalFraction:
         # OptionalFractionopt
 Exponent:
         E MinimumExponent
 MinimumExponent:
         0 MinimumExponentopt
 

Специальные символы шаблона

Специальные символы в таблице ниже интерпретируются синтаксически при использовании в шаблоне DecimalFormat. Они должны быть заключены в кавычки, если не указано иное, если они должны появиться в префиксе или суффиксе в качестве литералов.

Символы в столбце Symbol используются в нелокализованных шаблонах. Соответствующие символы в столбце Localized Symbol используются в локализованных шаблонах, при этом символы в Symbol теряют своё синтаксическое значение. Два исключения — знак валюты (U+00A4) и кавычка (U+0027), которые не локализованы.

Нелокализованные шаблоны следует использовать при вызове applyPattern(String). Локализованные шаблоны следует использовать при вызове applyLocalizedPattern(String).

Таблица символов, расположения, локализации и значения.
Символ Локализованный символ Расположение Значение
0 DecimalFormatSymbols.getZeroDigit() Число Цифра
# DecimalFormatSymbols.getDigit() Число Цифра, ноль отображается как отсутствующий
. DecimalFormatSymbols.getDecimalSeparator() Число Десятичный разделитель или денежный десятичный разделитель
- (U+002D) DecimalFormatSymbols.getMinusSign() Число Знак минус
, DecimalFormatSymbols.getGroupingSeparator() Число Разделитель группировки или денежный разделитель группировки
E DecimalFormatSymbols.getExponentSeparator() Число Разделяет мантиссу и показатель степени в научной записи. Это значение чувствительно к регистру. Не нужно заключать в кавычки в префиксе или суффиксе.
; DecimalFormatSymbols.getPatternSeparator() Граница подшаблона Разделяет положительные и отрицательные подшаблоны
% DecimalFormatSymbols.getPercent() Префикс или суффикс Умножить на 100 и показать как процент
‰ (U+2030) DecimalFormatSymbols.getPerMill() Префикс или суффикс Умножить на 1000 и показать как промилле
¤ (U+00A4) n/a (не локализован) Префикс или суффикс Знак валюты, заменяется символом валюты. При удвоении заменяется международным символом валюты. При наличии в шаблоне используются денежные разделители десятичных/группировки вместо десятичных/разделителей группировки.
' (U+0027) n/a (не локализован) Префикс или суффикс Используется для заключения в кавычки специальных символов в префиксе или суффиксе, например, "'#'#" форматирует 123 в "#123". Чтобы создать одиночную кавычку, используйте две подряд: "# o''clock".

Вычисление максимального количества цифр

Для любого данного DecimalFormat шаблона, если шаблон не в научной записи, максимальное количество целых цифр не вычисляется из шаблона и вместо этого устанавливается в Integer.MAX_VALUE. В противном случае, если шаблон в научной записи, максимальное количество целых цифр вычисляется из шаблона. Это вычисление подробно описано в разделе Scientific Notation. setMaximumIntegerDigits(int) может быть использовано для ручного изменения максимального количества целых цифр.

Отрицательные подшаблоны

Шаблон DecimalFormat содержит положительный и отрицательный подшаблоны, например, "#,##0.00;(#,##0.00)". Каждый подшаблон имеет префикс, числовую часть и суффикс. Отрицательный подшаблон необязателен; если он отсутствует, то положительный подшаблон с префиксом минус-знак '-' (U+002D HYPHEN-MINUS) используется как отрицательный подшаблон. То есть, "0.00" эквивалентно "0.00;-0.00". Если есть явный отрицательный подшаблон, он служит только для указания отрицательного префикса и суффикса; количество цифр, минимальное количество цифр и другие характеристики совпадают с положительным шаблоном. Это означает, что "#,##0.0#;(#)" производит точно такой же результат, как "#,##0.0#;(#,##0.0#)".

Префиксы, суффиксы и различные символы, используемые для бесконечности, цифр, разделителей группировки, десятичных разделителей и т.д., могут быть заданы произвольными значениями, и они будут отображаться должным образом во время форматирования. Однако необходимо следить за тем, чтобы символы и строки не конфликтовали, в противном случае парсинг будет ненадежным. Например, либо положительные, либо отрицательные префиксы или суффиксы должны отличаться для того, чтобы DecimalFormat.parse() смог различать положительные и отрицательные значения. (Если они идентичны, то DecimalFormat будет вести себя так, как если бы отрицательный подшаблон не был указан.) Другой пример: десятичный разделитель и разделитель группировки должны быть разными символами, иначе парсинг будет невозможен.

Разделитель группировки

Разделитель группировки обычно используется для тысяч, но в некоторых локалях он разделяет десятки тысяч. Размер группировки — это постоянное число цифр между разделителями группировки, например, 3 для 100 000 000 или 4 для 1 0000 0000. Если вы предоставите шаблон с несколькими разделителями группировки, интервал между последним и концом целой части — это интервал, который используется. Например, "#,##,###,####" == "######,####" == "##,####,####".

Научная запись

Числа в научной записи выражаются как произведение мантиссы и степени десяти, например, 1234 может быть выражено как 1,234 × 103. Мантисса часто находится в диапазоне 1,0 ≤ x < 10,0, но это необязательно. DecimalFormat может быть настроен на форматирование и парсинг научной записи только с помощью шаблона; в настоящее время нет метода-фабрики для создания формата научной записи. В шаблоне символ показателя степени, за которым следуют одна или несколько цифр, указывает на научную запись. Пример: "0.###E0" форматирует число 1234 как "1.234E3".

  • Количество цифр после символа экспоненты задаёт минимальное количество цифр экспоненты. Максимального значения нет. Отрицательные экспоненты форматируются с использованием локального знака минус, а не префиксом и суффиксом из шаблона. Это позволяет использовать шаблоны, такие как "0.###E0 m/s".
  • Максимальное количество цифр целой части равно сумме символов '0' и '#' перед десятичной точкой. Минимальное количество цифр целой части равно сумме символов '0' перед десятичной точкой. Максимальное и минимальное количество цифр дробной части подчиняются тем же правилам, но применяются к цифрам после десятичной точки, но перед экспонентой. Например, в следующем шаблоне: "#00.0####E0" будет минимальное количество цифр целой части = 2("00") и максимальное количество цифр целой части = 3("#00"). Минимальное количество цифр дробной части = 1("0") и максимальное количество цифр дробной части = 5("0####").
  • Минимальное и максимальное количество цифр целой части интерпретируются вместе:
    • Если максимальное количество цифр целой части больше их минимального количества и больше 1, то экспонента будет кратна максимальному количеству цифр целой части, а минимальное количество цифр целой части интерпретируется как 1. Наиболее распространённое применение этого — для генерации инженерной нотации, в которой экспонента кратна трём, например, "##0.#####E0". Используя этот шаблон, число 12345 форматируется как "12.345E3", а 123456 — как "123.456E3".
    • В противном случае минимальное количество цифр целой части достигается путём корректировки экспоненты. Пример: 0.00123, отформатированный с помощью "00.###E0", даёт "12.3E-4".
  • Для данного числа количество значащих цифр в мантиссе можно рассчитать следующим образом
     Mantissa Digits:
             min(max(Minimum Pattern Digits, Original Number Digits), Maximum Pattern Digits)
     Minimum pattern Digits:
             Minimum Integer Digits + Minimum Fraction Digits
     Maximum pattern Digits:
             Maximum Integer Digits + Maximum Fraction Digits
     Original Number Digits:
             The amount of significant digits in the number to be formatted
     
    Это означает, что, как правило, мантисса будет содержать до объединённого максимального количества цифр целой и дробной частей, если исходное число само по себе имеет достаточно значащих цифр. Однако, если количество минимальных цифр шаблона больше, чем количество значащих цифр в исходном числе, мантисса будет содержать значащие цифры, равные объединённому минимальному количеству цифр целой и дробной частей. Количество значащих цифр не влияет на разбор.

    Следует отметить, что целая часть мантиссы передаст любые лишние цифры дробной части, будь то для точности или для удовлетворения общего количества минимальных цифр.

    Это поведение можно наблюдать в следующем примере,

        DecimalFormat df = new DecimalFormat("#000.000##E0");
        df.format(12); // returns "12.0000E0"
        df.format(123456789) // returns "1.23456789E8"
    
  • Шаблоны экспоненциальной записи не могут содержать разделителей группировки.
С момента:
1.1
Внешние спецификации
  • Язык разметки данных локали Unicode (LDML)
См. также:
  • Java Tutorial
  • NumberFormat
  • DecimalFormatSymbols
  • ParsePosition
  • Locale
  • Сериализованная форма

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в классе java.text.NumberFormat

NumberFormat.Field, NumberFormat.Style

Краткое описание полей

Поля, объявленные в классе java.text.NumberFormat

FRACTION_FIELD, INTEGER_FIELD

Краткое описание конструкторов

Конструктор Описание
DecimalFormat()
Создаёт DecimalFormat с использованием шаблона по умолчанию и символов для локальной категории FORMAT по умолчанию.
DecimalFormat(String pattern)
Создаёт DecimalFormat с использованием заданного шаблона и символов для локальной категории FORMAT по умолчанию.
DecimalFormat(String pattern, DecimalFormatSymbols symbols)
Создаёт DecimalFormat с использованием заданного шаблона и символов.

Краткое описание методов

Модификатор и тип Метод Описание
void applyLocalizedPattern(String pattern)
Применяет заданный шаблон к этому объекту Format.
void applyPattern(String pattern)
Применяет заданный шаблон к этому объекту Format.
Object clone()
Стандартная перегрузка; никаких изменений в семантике.
boolean equals(Object obj)
Сравнивает указанный объект с этим объектом DecimalFormat на равенство.
StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition)
Форматирует double для получения строки.
StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition)
Форматирует long для получения строки.
final StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos)
Форматирует число и добавляет полученный текст в заданный буфер строк.
AttributedCharacterIterator formatToCharacterIterator(Object obj)
Форматирует объект, создавая AttributedCharacterIterator.
Currency getCurrency()
Возвращает валюту, используемую этим форматом десятичных дробей при форматировании значений валюты.
DecimalFormatSymbols getDecimalFormatSymbols()
Возвращает копию символов формата десятичных дробей, которые обычно не изменяются программистом или пользователем.
int getGroupingSize()
Возвращает размер группировки.
int getMaximumFractionDigits()
Возвращает максимальное количество цифр, разрешенных в дробной части числа.
int getMaximumIntegerDigits()
Возвращает максимальное количество цифр, разрешенных в целой части числа.
int getMinimumFractionDigits()
Возвращает минимальное количество цифр, разрешенных в дробной части числа.
int getMinimumIntegerDigits()
Возвращает минимальное количество цифр, разрешенных в целой части числа.
int getMultiplier()
Возвращает множитель для использования в процентах, промилле и подобных форматах.
String getNegativePrefix()
Возвращает префикс для отрицательных чисел.
String getNegativeSuffix()
Возвращает суффикс для отрицательных чисел.
String getPositivePrefix()
Возвращает префикс для положительных чисел.
String getPositiveSuffix()
Возвращает суффикс для положительных чисел.
RoundingMode getRoundingMode()
Возвращает RoundingMode, используемый в DecimalFormat.
int hashCode()
Возвращает хэш-код для этого объекта DecimalFormat.
boolean isDecimalSeparatorAlwaysShown()
Позволяет получить поведение разделителя десятичных дробей с целыми числами.
boolean isParseBigDecimal()
Возвращает, будет ли метод parse(java.lang.String, java.text.ParsePosition) возвращать BigDecimal.
boolean isStrict()
Возвращает true, если этот формат будет анализировать числа строго; false в противном случае.
Number parse(String text, ParsePosition pos)
Анализирует текст с начала заданной строки для получения Number.
void setCurrency(Currency currency)
Устанавливает валюту, используемую этим форматом чисел при форматировании значений валюты.
void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols)
Устанавливает символы формата десятичных дробей, которые обычно не изменяются программистом или пользователем.
void setDecimalSeparatorAlwaysShown(boolean newValue)
Позволяет установить поведение разделителя десятичных дробей с целыми числами.
void setGroupingSize(int newValue)
Устанавливает размер группировки.
void setMaximumFractionDigits(int newValue)
Устанавливает максимальное количество цифр, разрешенных в дробной части числа.
void setMaximumIntegerDigits(int newValue)
Устанавливает максимальное количество цифр, разрешенных в целой части числа.
void setMinimumFractionDigits(int newValue)
Устанавливает минимальное количество цифр, разрешенных в дробной части числа.
void setMinimumIntegerDigits(int newValue)
Устанавливает минимальное количество цифр, разрешенных в целой части числа.
void setMultiplier(int newValue)
Устанавливает множитель для использования в процентах, промилле и подобных форматах.
void setNegativePrefix(String newValue)
Устанавливает префикс для отрицательных чисел.
void setNegativeSuffix(String newValue)
Устанавливает суффикс для отрицательных чисел.
void setParseBigDecimal(boolean newValue)
Устанавливает, будет ли метод parse(java.lang.String, java.text.ParsePosition) возвращать BigDecimal.
void setPositivePrefix(String newValue)
Устанавливает префикс для положительных чисел.
void setPositiveSuffix(String newValue)
Устанавливает суффикс для положительных чисел.
void setRoundingMode(RoundingMode roundingMode)
Устанавливает RoundingMode, используемый в этом DecimalFormat.
void setStrict(boolean strict)
Изменяет значение толерантности для анализа.
String toLocalizedPattern()
Генерирует локализованную строку шаблона, представляющую текущее состояние этого объекта Format.
String toPattern()
Генерирует строку шаблона, представляющую текущее состояние этого объекта Format.
String toString()
Возвращает строку, идентифицирующую этот объект DecimalFormat, для отладки.

Методы, объявленные в классе java.text.NumberFormat

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

Методы, объявленные в классе java.text.Format

format, parseObject

Методы, объявленные в классе java.lang.Object

finalize, getClass, notify, notifyAll, wait, wait, wait
END_OF_DOCUMENT_MARKER

Подробное описание конструкторов

DecimalFormat

public DecimalFormat()
Создаёт DecimalFormat с использованием шаблона и символов по умолчанию для локали по умолчанию FORMAT. Это удобный способ получить DecimalFormat, когда локализация не является основной задачей.
Примечание API:
Чтобы получить стандартные форматы для заданной локали, используйте фабричные методы NumberFormat, такие как NumberFormat.getNumberInstance(Locale). Эти фабрики вернут наиболее подходящий подкласс NumberFormat для данной локали.
См. также:
  • NumberFormat.getInstance(Locale)
  • NumberFormat.getNumberInstance(Locale)
  • NumberFormat.getCurrencyInstance(Locale)
  • NumberFormat.getPercentInstance(Locale)

DecimalFormat

public DecimalFormat(String pattern)
Создаёт DecimalFormat с использованием заданного шаблона и символов для локали по умолчанию FORMAT. Это удобный способ получить DecimalFormat, когда локализация не является основной задачей. Количество максимальных целых цифр обычно не выводится из шаблона. См. примечание в разделе Patterns для получения дополнительной информации.
Примечание API:
Чтобы получить стандартные форматы для заданной локали, используйте фабричные методы NumberFormat, такие как NumberFormat.getNumberInstance(Locale). Эти фабрики вернут наиболее подходящий подкласс NumberFormat для данной локали.
Параметры:
pattern - строка шаблона без локализации.
Исключения:
NullPointerException - если pattern равно null
IllegalArgumentException - если заданный шаблон некорректен.
См. также:
  • NumberFormat.getInstance(Locale)
  • NumberFormat.getNumberInstance(Locale)
  • NumberFormat.getCurrencyInstance(Locale)
  • NumberFormat.getPercentInstance(Locale)

DecimalFormat

public DecimalFormat(String pattern, DecimalFormatSymbols symbols)
Создаёт DecimalFormat с использованием заданного шаблона и символов. Используйте этот конструктор, когда вам нужно полностью настроить поведение формата. Количество максимальных целых цифр обычно не выводится из шаблона. См. примечание в разделе Patterns для получения дополнительной информации.
Примечание API:
Чтобы получить стандартные форматы для заданной локали, используйте фабричные методы NumberFormat, такие как NumberFormat.getInstance(Locale) или NumberFormat.getCurrencyInstance(Locale). Если вам нужны только незначительные корректировки стандартного формата, вы можете изменить формат, возвращаемый методом NumberFormat фабрики.
Параметры:
pattern - строка шаблона без локализации
symbols - набор символов для использования
Исключения:
NullPointerException - если какой-либо из заданных аргументов равен null
IllegalArgumentException - если заданный шаблон некорректен
См. также:
  • NumberFormat.getInstance(Locale)
  • NumberFormat.getNumberInstance(Locale)
  • NumberFormat.getCurrencyInstance(Locale)
  • NumberFormat.getPercentInstance(Locale)
  • DecimalFormatSymbols

Подробное описание методов

format

public final StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos)
Форматирует число и добавляет полученный текст в заданный буфер строк. Число может быть любого подкласса Number.
Переопределяет:
format в классе NumberFormat
Требования к реализации:
Эта реализация использует максимальную точность.
Параметры:
number - число для форматирования
toAppendTo - StringBuffer, в который будет добавлен отформатированный текст
pos - отслеживает позицию поля в возвращаемой строке. Например, для форматирования числа 1234567.89 в локали Locale.US, если заданный fieldPosition равен NumberFormat.INTEGER_FIELD, начальный и конечный индексы fieldPosition будут установлены в 0 и 9 соответственно для выходной строки 1,234,567.89.
Возвращает:
переданное значение как toAppendTo
Исключения:
IllegalArgumentException - если number равно null или не является экземпляром Number.
NullPointerException - если toAppendTo или pos равно null
ArithmeticException - если необходима округление с режимом округления RoundingMode.UNNECESSARY
См. также:
  • FieldPosition

format

public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition)
Форматирует double в строку.
Определено в:
format в классе NumberFormat
Параметры:
number - double для форматирования
result - место для добавления текста
fieldPosition - отслеживает позицию поля в возвращаемой строке. Например, для форматирования числа 1234567.89 в локали Locale.US, если заданный fieldPosition равен NumberFormat.INTEGER_FIELD, начальный и конечный индексы fieldPosition будут установлены в 0 и 9 соответственно для выходной строки 1,234,567.89.
Возвращает:
Отформатированная строка числа
Исключения:
NullPointerException - если result или fieldPosition равно null
ArithmeticException - если необходимо округление с режимом округления RoundingMode.UNNECESSARY
См. также:
  • FieldPosition

format

public StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition)
Форматирует long в строку.
Определено в:
format в классе NumberFormat
Параметры:
number - long для форматирования
result - место для добавления текста
fieldPosition - отслеживает позицию поля в возвращаемой строке. Например, для форматирования числа 123456789 в локали Locale.US, если заданный fieldPosition равен NumberFormat.INTEGER_FIELD, начальный и конечный индексы fieldPosition будут установлены в 0 и 11 соответственно для выходной строки 123,456,789.
Возвращает:
Отформатированная строка числа
Исключения:
NullPointerException - если result или fieldPosition равно null
ArithmeticException - если необходимо округление с режимом округления RoundingMode.UNNECESSARY
См. также:
  • FieldPosition

formatToCharacterIterator

public AttributedCharacterIterator formatToCharacterIterator(Object obj)
Форматирует объект, производя AttributedCharacterIterator. Вы можете использовать возвращенный AttributedCharacterIterator для построения результирующей строки, а также для определения информации о результирующей строке.

Каждый ключ атрибута AttributedCharacterIterator будет типа NumberFormat.Field, а значение атрибута будет таким же, как и ключ атрибута.

Переопределяет:
formatToCharacterIterator в классе Format
Параметры:
obj - объект для форматирования
Возвращает:
AttributedCharacterIterator, описывающий отформатированное значение.
Исключения:
NullPointerException - если obj равно null.
IllegalArgumentException - когда Format не может отформатировать данный объект.
ArithmeticException - если необходимо округление с режимом округления RoundingMode.UNNECESSARY
С:
1.4

parse

public Number parse(String text, ParsePosition pos)
Разбирает текст с начала заданной строки, чтобы получить Number.

Этот метод пытается разобрать текст, начиная с индекса, заданного ParsePosition. Если разбор успешен, то индекс ParsePosition обновляется до индекса после последнего использованного символа (разбор не обязательно использует все символы до конца строки), и возвращается разобранное число. Обновлённый ParsePosition может быть использован для указания начальной точки для следующего вызова этого метода. Если произошла ошибка, индекс ParsePosition не изменяется, индекс ошибки в ParsePosition устанавливается в индекс символа, где произошла ошибка, и возвращается null.

Этот метод вернёт Long, если возможно (например, в пределах [Long.MIN_VALUE, Long.MAX_VALUE] и без десятичных знаков), иначе Double.

Разбор может выполняться в строгом или свободном режиме, по умолчанию используется свободный режим.

Разбор терпит неудачу в свободном режиме, если префикс и/или суффикс не пустые и не могут быть найдены из-за преждевременного завершения разбора, или если первый символ после префикса не может быть разобран.

Разбор терпит неудачу в строгом режиме, если в text:

  • Префикс не найден. Например, префикс формата валюты Locale.US: "$"
  • Суффикс не найден. Например, суффикс формата процентов Locale.US: "%"
  • NumberFormat.isGroupingUsed() возвращает true, и getGroupingSize() не соблюдается
  • NumberFormat.isGroupingUsed() возвращает false, и группировочный символ найден
  • NumberFormat.isGroupingUsed() возвращает true и группировочный символ встречается после разделителя десятичных знаков
  • Найдены любые другие символы, которые не являются ожидаемыми символами, и не являются цифрами, встречающимися в числовой части

Возвращаемый подкласс зависит от значения isParseBigDecimal(), а также от анализируемой строки.

  • Если isParseBigDecimal() ложно (по умолчанию), большинство целых значений возвращаются как объекты Long, независимо от того, как они записаны: "17" и "17.000" оба разбираются в Long(17). Значения, которые не могут поместиться в Long, возвращаются как Double. Это включает значения с дробной частью, бесконечные значения, NaN и значение -0.0. DecimalFormat не решает, возвращать ли Double или Long, исходя из наличия разделителя десятичных знаков в исходной строке. Это предотвратило бы точное разбиение целых чисел, которые переполняют мантиссу двойного, например, "-9,223,372,036,854,775,808.00".

    Вызывающие методы могут использовать методы Number doubleValue, longValue и т.д., чтобы получить желаемый тип.

  • Если isParseBigDecimal() истинно, значения возвращаются как объекты BigDecimal. Значения — это те, которые созданы BigDecimal(String) для соответствующих строк в локализованном формате. Специальные случаи отрицательной и положительной бесконечности и NaN возвращаются как экземпляры Double, содержащие значения соответствующих констант Double.

DecimalFormat разбирает все символы Юникода, представляющие десятичные цифры, как определено Character.digit(). Кроме того, DecimalFormat также распознаёт в качестве цифр десять последовательных символов, начиная с локализованной цифры ноль, определённой в объекте DecimalFormatSymbols.

Specified by:
parse в классе NumberFormat
Parameters:
text - строка для разбора
pos - Объект ParsePosition с информацией об индексе и индексе ошибки, как описано выше.
Returns:
разобранное значение или null, если разбор не удался
Throws:
NullPointerException - если text или pos равно null.
See Also:
  • NumberFormat.isStrict()

getDecimalFormatSymbols

public DecimalFormatSymbols getDecimalFormatSymbols()
Возвращает копию символов формата десятичных чисел, которые обычно не изменяются программистом или пользователем.
Returns:
копия необходимых DecimalFormatSymbols
See Also:
  • DecimalFormatSymbols

setDecimalFormatSymbols

public void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols)
Устанавливает символы формата десятичных чисел, которые обычно не изменяются программистом или пользователем.
Parameters:
newSymbols - необходимые DecimalFormatSymbols
See Also:
  • DecimalFormatSymbols

getPositivePrefix

public String getPositivePrefix()
Получить положительный префикс.

Примеры: +123, $123, sFr123

Returns:
положительный префикс

setPositivePrefix

public void setPositivePrefix(String newValue)
Установить положительный префикс.

Примеры: +123, $123, sFr123

Parameters:
newValue - новый положительный префикс

getNegativePrefix

public String getNegativePrefix()
Получить отрицательный префикс.

Примеры: -123, ($123) (с отрицательным суффиксом), sFr-123

Returns:
отрицательный префикс

setNegativePrefix

public void setNegativePrefix(String newValue)
Установить отрицательный префикс.

Примеры: -123, ($123) (с отрицательным суффиксом), sFr-123

Parameters:
newValue - новый отрицательный префикс

getPositiveSuffix

public String getPositiveSuffix()
Получить положительный суффикс.

Пример: 123%

Returns:
положительный суффикс

setPositiveSuffix

public void setPositiveSuffix(String newValue)
Установить положительный суффикс.

Пример: 123%

Parameters:
newValue - новый положительный суффикс

getNegativeSuffix

public String getNegativeSuffix()
Получить отрицательный суффикс.

Примеры: -123%, ($123) (с положительными суффиксами)

Returns:
отрицательный суффикс

setNegativeSuffix

public void setNegativeSuffix(String newValue)
Установить отрицательный суффикс.

Примеры: 123%

Parameters:
newValue - новый отрицательный суффикс

getMultiplier

public int getMultiplier()
Получает множитель для использования в процентах, промилле и аналогичных форматах.
Returns:
множитель
See Also:
  • setMultiplier(int)

setMultiplier

public void setMultiplier(int newValue)
Устанавливает множитель для использования в процентах, промилле и аналогичных форматах. Для формата процентов установите множитель в 100 и суффиксы в '%' (для арабского языка используйте арабский знак процента). Для формата промилле установите множитель в 1000 и суффиксы в 'U+2030'.

Пример: при множителе 100, 1.23 форматируется как "123", и "123" разбирается в 1.23. Если isParseIntegerOnly() возвращает true, "123" разбирается в 1.

Parameters:
newValue - новый множитель
See Also:
  • getMultiplier()

getGroupingSize

public int getGroupingSize()
Возвращает размер группировки. Размер группировки — это количество цифр между разделителями группировки в целой части числа. Например, в числе "123 456.78" размер группировки равен 3. Размер группировки нуль означает, что группировка не используется, что обеспечивает такое же форматирование, как если бы был вызван setGroupingUsed(false).
Returns:
размер группировки
See Also:
  • setGroupingSize(int)
  • NumberFormat.isGroupingUsed()
  • DecimalFormatSymbols.getGroupingSeparator()

setGroupingSize

public void setGroupingSize(int newValue)
Устанавливает размер группировки. Размер группировки — это количество цифр между разделителями группировки в целой части числа. Например, в числе "123 456,78" размер группировки равен 3. Размер группировки, равный нулю, означает, что группировка не используется, что обеспечивает тот же формат, что и при вызове setGroupingUsed(false).

Передаваемое значение преобразуется в байт, что может привести к потере информации. Значения, которые являются отрицательными или больше Byte.MAX_VALUE, приведут к исключению IllegalArgumentException.

Parameters:
newValue - новый размер группировки
Throws:
IllegalArgumentException - если newValue отрицательное или больше Byte.MAX_VALUE
See Also:
  • getGroupingSize()
  • NumberFormat.setGroupingUsed(boolean)
  • DecimalFormatSymbols.setGroupingSeparator(char)

isDecimalSeparatorAlwaysShown

public boolean isDecimalSeparatorAlwaysShown()
Позволяет получить поведение разделителя десятичных знаков с целыми числами. (Разделитель десятичных знаков всегда будет отображаться с десятичными знаками.)

Пример: Десятичные знаки ВКЛ: 12345 → 12345.; ВЫКЛ: 12345 → 12345

Returns:
true, если разделитель десятичных знаков всегда отображается; false в противном случае

setDecimalSeparatorAlwaysShown

public void setDecimalSeparatorAlwaysShown(boolean newValue)
Позволяет установить поведение разделителя десятичных знаков с целыми числами. (Разделитель десятичных знаков всегда будет отображаться с десятичными знаками.)

Пример: Десятичные знаки ВКЛ: 12345 → 12345.; ВЫКЛ: 12345 → 12345

Parameters:
newValue - true, если разделитель десятичных знаков всегда отображается; false в противном случае

isStrict

public boolean isStrict()
Возвращает true, если этот формат будет анализировать числа строго; false в противном случае.
Overrides:
isStrict в классе NumberFormat
Returns:
true, если этот формат будет анализировать числа строго; false в противном случае
Since:
23
See Also:
  • setStrict(boolean)
  • parse(String, ParsePosition)

setStrict

public void setStrict(boolean strict)
Изменяет значение строгости для анализа. Анализ может быть строгим или нестрогим, по умолчанию он нестрогий.
Overrides:
setStrict в классе NumberFormat
Parameters:
strict - true, если анализ должен выполняться строго; false в противном случае
Since:
23
See Also:
  • isStrict()
  • parse(String, ParsePosition)

isParseBigDecimal

public boolean isParseBigDecimal()
Возвращает, возвращает ли метод parse(java.lang.String, java.text.ParsePosition) значение BigDecimal. Значение по умолчанию — false.
Returns:
true, если метод parse возвращает BigDecimal; false в противном случае
Since:
1.5
See Also:
  • setParseBigDecimal(boolean)

setParseBigDecimal

public void setParseBigDecimal(boolean newValue)
Устанавливает, возвращает ли метод parse(java.lang.String, java.text.ParsePosition) значение BigDecimal.
Parameters:
newValue - true, если метод parse возвращает BigDecimal; false в противном случае
Since:
1.5
See Also:
  • isParseBigDecimal()

clone

public Object clone()
Стандартная перегрузка; семантика не изменилась.
Overrides:
clone в классе NumberFormat
Returns:
клонированный экземпляр.
See Also:
  • Cloneable

equals

public boolean equals(Object obj)
Сравнивает указанный объект с этим DecimalFormat на предмет равенства. Возвращает true, если объект также является DecimalFormat и два формата будут форматировать любое значение одинаково.
Overrides:
equals в классе NumberFormat
Implementation Requirements:
Этот метод выполняет проверку на равенство с концепцией идентичности класса, основанной на getClass(), а не на instanceof. Поэтому в методах equals в подклассах ни один экземпляр этого класса не должен сравниваться как равный экземпляру подкласса.
Parameters:
obj - объект, который необходимо сравнить на предмет равенства
Returns:
true, если указанный объект равен этому DecimalFormat
See Also:
  • Object.equals(Object)

hashCode

public int hashCode()
Возвращает хэш-код для этого DecimalFormat.
Overrides:
hashCode в классе NumberFormat
Implementation Requirements:
Этот метод вычисляет значение хэш-кода, используя значения, возвращаемые из getPositivePrefix() и NumberFormat.hashCode().
Returns:
хэш-код для этого DecimalFormat
See Also:
  • Object.hashCode()
  • NumberFormat.hashCode()

toString

public String toString()
Возвращает строку, идентифицирующую этот DecimalFormat, для отладки.
Overrides:
toString в классе Object
Returns:
строка, идентифицирующая этот DecimalFormat, для отладки

toPattern

public String toPattern()
Генерирует строку шаблона, которая представляет текущее состояние этого объекта Format.
Returns:
строка шаблона
See Also:
  • applyPattern(java.lang.String)

toLocalizedPattern

public String toLocalizedPattern()
Генерирует строку локализованного шаблона, которая представляет текущее состояние этого объекта Format.
Returns:
строка локализованного шаблона
See Also:
  • applyPattern(java.lang.String)

applyPattern

public void applyPattern(String pattern)
Применяет заданный шаблон к этому объекту Format. Шаблон — это краткое описание различных свойств форматирования. Эти свойства также можно изменить по отдельности с помощью различных методов set.

Количество максимальных цифр целой части обычно не выводится из шаблона. Дополнительные сведения см. в примечании к разделу Patterns. Для отрицательных чисел используйте второй шаблон, разделенный точкой с запятой

Пример "#,#00.0#" → 1 234,56

Это означает минимум 2 цифры целой части, 1 цифру дробной части и максимум 2 цифры дробной части.

Пример: "#,#00.0#;(#,#00.0#)" для отрицательных чисел в скобках.

В отрицательных шаблонах минимальное и максимальное количество игнорируются; предполагается, что они установлены в положительном шаблоне.

Parameters:
pattern - новый шаблон
Throws:
NullPointerException - если pattern равно null
IllegalArgumentException - если заданный шаблон некорректен.

applyLocalizedPattern

public void applyLocalizedPattern(String pattern)
Применяет заданный шаблон к этому объекту Format. Шаблон предполагается в локальном формате. Шаблон — это краткое описание различных свойств форматирования. Эти свойства также можно изменить индивидуально с помощью различных методов установки.

Количество максимальных цифр целой части обычно не выводится из шаблона. Более подробную информацию см. в разделе Patterns. Для отрицательных чисел используйте второй шаблон, разделенный точкой с запятой

Пример "#,#00.0#" → 1 234,56

Это означает минимум 2 цифры в целой части, 1 цифру в дробной части и максимум 2 цифры в дробной части.

Пример: "#,#00.0#;(#,#00.0#)" для отрицательных чисел в скобках.

В шаблонах для отрицательных чисел минимальное и максимальное количество цифр игнорируется; предполагается, что они установлены в шаблоне для положительных чисел.

Parameters:
pattern - новый шаблон
Throws:
NullPointerException - если pattern равно null
IllegalArgumentException - если заданный шаблон некорректен.

setMaximumIntegerDigits

public void setMaximumIntegerDigits(int newValue)
Устанавливает максимальное количество цифр, разрешённых в целой части числа. Отрицательные значения ввода заменяются на 0.
Overrides:
setMaximumIntegerDigits в классе NumberFormat
Parameters:
newValue - максимальное количество цифр целой части; если меньше нуля, то используется ноль. Конкретный подкласс может применить верхний предел к этому значению, соответствующий типу числовых данных, которые форматируются.
See Also:
  • NumberFormat.setMaximumIntegerDigits(int)
  • Пределы цифр целой и дробной части

setMinimumIntegerDigits

public void setMinimumIntegerDigits(int newValue)
Устанавливает минимальное количество цифр, разрешённых в целой части числа. Отрицательные значения ввода заменяются на 0.
Overrides:
setMinimumIntegerDigits в классе NumberFormat
Parameters:
newValue - минимальное количество цифр целой части; если меньше нуля, то используется ноль. Конкретный подкласс может применить верхний предел к этому значению, соответствующий типу числовых данных, которые форматируются.
See Also:
  • NumberFormat.setMinimumIntegerDigits(int)
  • Пределы цифр целой и дробной части

setMaximumFractionDigits

public void setMaximumFractionDigits(int newValue)
Устанавливает максимальное количество цифр, разрешённых в дробной части числа. Отрицательные значения ввода заменяются на 0.
Overrides:
setMaximumFractionDigits в классе NumberFormat
Parameters:
newValue - максимальное количество цифр дробной части; если меньше нуля, то используется ноль. Конкретный подкласс может применить верхний предел к этому значению, соответствующий типу числовых данных, которые форматируются.
See Also:
  • NumberFormat.setMaximumFractionDigits(int)
  • Пределы цифр целой и дробной части

setMinimumFractionDigits

public void setMinimumFractionDigits(int newValue)
Устанавливает минимальное количество цифр, разрешённых в дробной части числа. Отрицательные значения ввода заменяются на 0.
Overrides:
setMinimumFractionDigits в классе NumberFormat
Parameters:
newValue - минимальное количество цифр дробной части; если меньше нуля, то используется ноль. Конкретный подкласс может применить верхний предел к этому значению, соответствующий типу числовых данных, которые форматируются.
See Also:
  • NumberFormat.setMinimumFractionDigits(int)
  • Пределы цифр целой и дробной части

getMaximumIntegerDigits

public int getMaximumIntegerDigits()
Возвращает максимальное количество цифр, разрешённых в целой части числа. Максимальное количество цифр целой части можно установить с помощью setMaximumIntegerDigits(int) или applyPattern(String). См. раздел Pattern Section для получения подробных правил, касающихся максимального количества цифр целой части в шаблонах.
Overrides:
getMaximumIntegerDigits в классе NumberFormat
Returns:
максимальное количество цифр
See Also:
  • setMaximumIntegerDigits(int)
  • Пределы цифр целой и дробной части

getMinimumIntegerDigits

public int getMinimumIntegerDigits()
Возвращает минимальное количество цифр, разрешённых в целой части числа.
Overrides:
getMinimumIntegerDigits в классе NumberFormat
Returns:
минимальное количество цифр
See Also:
  • setMinimumIntegerDigits(int)
  • Пределы цифр целой и дробной части

getMaximumFractionDigits

public int getMaximumFractionDigits()
Возвращает максимальное количество цифр, разрешённых в дробной части числа.
Overrides:
getMaximumFractionDigits в классе NumberFormat
Returns:
максимальное количество цифр.
See Also:
  • setMaximumFractionDigits(int)
  • Пределы цифр целой и дробной части

getMinimumFractionDigits

public int getMinimumFractionDigits()
Возвращает минимальное количество цифр, разрешённых в дробной части числа.
Overrides:
getMinimumFractionDigits в классе NumberFormat
Returns:
минимальное количество цифр
See Also:
  • setMinimumFractionDigits(int)
  • Пределы цифр целой и дробной части

getCurrency

public Currency getCurrency()
Возвращает валюту, используемую этим форматом десятичных чисел при форматировании денежных значений. Валюта извлекается с помощью вызова DecimalFormatSymbols.getCurrency для символов этого формата чисел.
Overrides:
getCurrency в классе NumberFormat
Returns:
валюту, используемую этим форматом десятичных чисел, или null
Since:
1.4

setCurrency

public void setCurrency(Currency currency)
Устанавливает валюту, используемую этим форматом чисел при форматировании денежных значений. Это не обновляет минимальное или максимальное количество знаков после запятой, используемых форматом чисел. Валюта устанавливается с помощью вызова DecimalFormatSymbols.setCurrency для символов этого формата чисел.
Overrides:
setCurrency в классе NumberFormat
Parameters:
currency - новая валюта, которая будет использоваться этим форматом десятичных чисел
Throws:
NullPointerException - если currency равно null
Since:
1.4

getRoundingMode

public RoundingMode getRoundingMode()
Возвращает RoundingMode, используемый в этом DecimalFormat.
Overrides:
getRoundingMode в классе NumberFormat
Returns:
RoundingMode, используемый для этого DecimalFormat.
Since:
1.6
See Also:
  • setRoundingMode(RoundingMode)

setRoundingMode

public void setRoundingMode(RoundingMode roundingMode)
Устанавливает RoundingMode, используемый в этом DecimalFormat.
Overrides:
setRoundingMode в классе NumberFormat
Parameters:
roundingMode - RoundingMode для использования
Throws:
NullPointerException - если roundingMode равно null.
Since:
1.6
See Also:
  • getRoundingMode()

© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/text/DecimalFormat.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API