Класс 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).Символ Локализованный символ Расположение Значение 0DecimalFormatSymbols.getZeroDigit()Число Цифра #DecimalFormatSymbols.getDigit()Число Цифра, ноль отображается как отсутствующий .DecimalFormatSymbols.getDecimalSeparator()Число Десятичный разделитель или денежный десятичный разделитель - (U+002D)DecimalFormatSymbols.getMinusSign()Число Знак минус ,DecimalFormatSymbols.getGroupingSeparator()Число Разделитель группировки или денежный разделитель группировки EDecimalFormatSymbols.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".
- Если максимальное количество цифр целой части больше их минимального количества и больше 1, то экспонента будет кратна максимальному количеству цифр целой части, а минимальное количество цифр целой части интерпретируется как 1. Наиболее распространённое применение этого — для генерации инженерной нотации, в которой экспонента кратна трём, например,
- Для данного числа количество значащих цифр в мантиссе можно рассчитать следующим образом
Это означает, что, как правило, мантисса будет содержать до объединённого максимального количества цифр целой и дробной частей, если исходное число само по себе имеет достаточно значащих цифр. Однако, если количество минимальных цифр шаблона больше, чем количество значащих цифр в исходном числе, мантисса будет содержать значащие цифры, равные объединённому минимальному количеству цифр целой и дробной частей. Количество значащих цифр не влияет на разбор.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
- Внешние спецификации
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе java.text.NumberFormat
NumberFormat.Field, NumberFormat.Style
Краткое описание полей
Поля, объявленные в классе java.text.NumberFormat
FRACTION_FIELD, INTEGER_FIELD
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
DecimalFormat() |
Создаёт DecimalFormat с использованием шаблона по умолчанию и символов для локальной категории FORMAT по умолчанию. |
DecimalFormat |
Создаёт DecimalFormat с использованием заданного шаблона и символов для локальной категории FORMAT по умолчанию. |
DecimalFormat |
Создаёт DecimalFormat с использованием заданного шаблона и символов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
applyLocalizedPattern |
Применяет заданный шаблон к этому объекту Format. |
void |
applyPattern |
Применяет заданный шаблон к этому объекту Format. |
Object |
clone() |
Стандартная перегрузка; никаких изменений в семантике. |
boolean |
equals |
Сравнивает указанный объект с этим объектом DecimalFormat на равенство. |
StringBuffer |
format |
Форматирует double для получения строки. |
StringBuffer |
format |
Форматирует long для получения строки. |
final StringBuffer |
format |
Форматирует число и добавляет полученный текст в заданный буфер строк. |
AttributedCharacterIterator |
formatToCharacterIterator |
Форматирует объект, создавая 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 |
Анализирует текст с начала заданной строки для получения Number. |
void |
setCurrency |
Устанавливает валюту, используемую этим форматом чисел при форматировании значений валюты. |
void |
setDecimalFormatSymbols |
Устанавливает символы формата десятичных дробей, которые обычно не изменяются программистом или пользователем. |
void |
setDecimalSeparatorAlwaysShown |
Позволяет установить поведение разделителя десятичных дробей с целыми числами. |
void |
setGroupingSize |
Устанавливает размер группировки. |
void |
setMaximumFractionDigits |
Устанавливает максимальное количество цифр, разрешенных в дробной части числа. |
void |
setMaximumIntegerDigits |
Устанавливает максимальное количество цифр, разрешенных в целой части числа. |
void |
setMinimumFractionDigits |
Устанавливает минимальное количество цифр, разрешенных в дробной части числа. |
void |
setMinimumIntegerDigits |
Устанавливает минимальное количество цифр, разрешенных в целой части числа. |
void |
setMultiplier |
Устанавливает множитель для использования в процентах, промилле и подобных форматах. |
void |
setNegativePrefix |
Устанавливает префикс для отрицательных чисел. |
void |
setNegativeSuffix |
Устанавливает суффикс для отрицательных чисел. |
void |
setParseBigDecimal |
Устанавливает, будет ли метод parse(java.lang.String, java.text.ParsePosition) возвращать BigDecimal. |
void |
setPositivePrefix |
Устанавливает префикс для положительных чисел. |
void |
setPositiveSuffix |
Устанавливает суффикс для положительных чисел. |
void |
setRoundingMode |
Устанавливает RoundingMode, используемый в этом DecimalFormat. |
void |
setStrict |
Изменяет значение толерантности для анализа. |
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
Подробное описание конструкторов
DecimalFormat
public DecimalFormat()
FORMAT. Это удобный способ получить DecimalFormat, когда локализация не является основной задачей.- Примечание API:
- Чтобы получить стандартные форматы для заданной локали, используйте фабричные методы
NumberFormat, такие какNumberFormat.getNumberInstance(Locale). Эти фабрики вернут наиболее подходящий подкласс NumberFormat для данной локали. - См. также:
DecimalFormat
public DecimalFormat(String pattern)
FORMAT. Это удобный способ получить DecimalFormat, когда локализация не является основной задачей. Количество максимальных целых цифр обычно не выводится из шаблона. См. примечание в разделе Patterns для получения дополнительной информации.- Примечание API:
- Чтобы получить стандартные форматы для заданной локали, используйте фабричные методы
NumberFormat, такие какNumberFormat.getNumberInstance(Locale). Эти фабрики вернут наиболее подходящий подкласс NumberFormat для данной локали. - Параметры:
-
pattern- строка шаблона без локализации. - Исключения:
-
NullPointerException- еслиpatternравно null -
IllegalArgumentException- если заданный шаблон некорректен. - См. также:
DecimalFormat
public DecimalFormat(String pattern, DecimalFormatSymbols symbols)
Patterns для получения дополнительной информации.- Примечание API:
- Чтобы получить стандартные форматы для заданной локали, используйте фабричные методы
NumberFormat, такие какNumberFormat.getInstance(Locale)илиNumberFormat.getCurrencyInstance(Locale). Если вам нужны только незначительные корректировки стандартного формата, вы можете изменить формат, возвращаемый методом NumberFormat фабрики. - Параметры:
-
pattern- строка шаблона без локализации -
symbols- набор символов для использования - Исключения:
-
NullPointerException- если какой-либо из заданных аргументов равен null -
IllegalArgumentException- если заданный шаблон некорректен - См. также:
Подробное описание методов
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 - См. также:
format
public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition)
- Определено в:
-
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 - См. также:
format
public StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition)
- Определено в:
-
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 - См. также:
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".Вызывающие методы могут использовать методы
NumberdoubleValue,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:
getDecimalFormatSymbols
public DecimalFormatSymbols getDecimalFormatSymbols()
- Returns:
- копия необходимых DecimalFormatSymbols
- See Also:
setDecimalFormatSymbols
public void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols)
- Parameters:
-
newSymbols- необходимые DecimalFormatSymbols - See Also:
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
public void setMultiplier(int newValue)
U+2030'. Пример: при множителе 100, 1.23 форматируется как "123", и "123" разбирается в 1.23. Если isParseIntegerOnly() возвращает true, "123" разбирается в 1.
- Parameters:
-
newValue- новый множитель - See Also:
getGroupingSize
public int getGroupingSize()
setGroupingUsed(false).- Returns:
- размер группировки
- See Also:
setGroupingSize
public void setGroupingSize(int newValue)
setGroupingUsed(false). Передаваемое значение преобразуется в байт, что может привести к потере информации. Значения, которые являются отрицательными или больше Byte.MAX_VALUE, приведут к исключению IllegalArgumentException.
- Parameters:
-
newValue- новый размер группировки - Throws:
-
IllegalArgumentException- еслиnewValueотрицательное или большеByte.MAX_VALUE - See Also:
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
public void setStrict(boolean strict)
- Overrides:
-
setStrictв классеNumberFormat - Parameters:
-
strict-true, если анализ должен выполняться строго;falseв противном случае - Since:
- 23
- See Also:
isParseBigDecimal
public boolean isParseBigDecimal()
parse(java.lang.String, java.text.ParsePosition) значение BigDecimal. Значение по умолчанию — false.- Returns:
-
true, если метод parse возвращает BigDecimal;falseв противном случае - Since:
- 1.5
- See Also:
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:
clone
public Object clone()
- Overrides:
-
cloneв классеNumberFormat - Returns:
- клонированный экземпляр.
- See Also:
equals
public boolean equals(Object obj)
DecimalFormat на предмет равенства. Возвращает true, если объект также является DecimalFormat и два формата будут форматировать любое значение одинаково.- Overrides:
-
equalsв классеNumberFormat - Implementation Requirements:
- Этот метод выполняет проверку на равенство с концепцией идентичности класса, основанной на
getClass(), а не наinstanceof. Поэтому в методах equals в подклассах ни один экземпляр этого класса не должен сравниваться как равный экземпляру подкласса. - Parameters:
-
obj- объект, который необходимо сравнить на предмет равенства - Returns:
-
true, если указанный объект равен этомуDecimalFormat - See Also:
hashCode
public int hashCode()
DecimalFormat.- Overrides:
-
hashCodeв классеNumberFormat - Implementation Requirements:
- Этот метод вычисляет значение хэш-кода, используя значения, возвращаемые из
getPositivePrefix()иNumberFormat.hashCode(). - Returns:
- хэш-код для этого
DecimalFormat - See Also:
toString
toPattern
public String toPattern()
- Returns:
- строка шаблона
- See Also:
toLocalizedPattern
public String toLocalizedPattern()
- Returns:
- строка локализованного шаблона
- See Also:
applyPattern
public void applyPattern(String pattern)
Количество максимальных цифр целой части обычно не выводится из шаблона. Дополнительные сведения см. в примечании к разделу 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)
Количество максимальных цифр целой части обычно не выводится из шаблона. Более подробную информацию см. в разделе 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)
- Overrides:
-
setMaximumIntegerDigitsв классеNumberFormat - Parameters:
-
newValue- максимальное количество цифр целой части; если меньше нуля, то используется ноль. Конкретный подкласс может применить верхний предел к этому значению, соответствующий типу числовых данных, которые форматируются. - See Also:
setMinimumIntegerDigits
public void setMinimumIntegerDigits(int newValue)
- Overrides:
-
setMinimumIntegerDigitsв классеNumberFormat - Parameters:
-
newValue- минимальное количество цифр целой части; если меньше нуля, то используется ноль. Конкретный подкласс может применить верхний предел к этому значению, соответствующий типу числовых данных, которые форматируются. - See Also:
setMaximumFractionDigits
public void setMaximumFractionDigits(int newValue)
- Overrides:
-
setMaximumFractionDigitsв классеNumberFormat - Parameters:
-
newValue- максимальное количество цифр дробной части; если меньше нуля, то используется ноль. Конкретный подкласс может применить верхний предел к этому значению, соответствующий типу числовых данных, которые форматируются. - See Also:
setMinimumFractionDigits
public void setMinimumFractionDigits(int newValue)
- Overrides:
-
setMinimumFractionDigitsв классеNumberFormat - Parameters:
-
newValue- минимальное количество цифр дробной части; если меньше нуля, то используется ноль. Конкретный подкласс может применить верхний предел к этому значению, соответствующий типу числовых данных, которые форматируются. - See Also:
getMaximumIntegerDigits
public int getMaximumIntegerDigits()
setMaximumIntegerDigits(int) или applyPattern(String). См. раздел Pattern Section для получения подробных правил, касающихся максимального количества цифр целой части в шаблонах.- Overrides:
-
getMaximumIntegerDigitsв классеNumberFormat - Returns:
- максимальное количество цифр
- See Also:
getMinimumIntegerDigits
public int getMinimumIntegerDigits()
- Overrides:
-
getMinimumIntegerDigitsв классеNumberFormat - Returns:
- минимальное количество цифр
- See Also:
getMaximumFractionDigits
public int getMaximumFractionDigits()
- Overrides:
-
getMaximumFractionDigitsв классеNumberFormat - Returns:
- максимальное количество цифр.
- See Also:
getMinimumFractionDigits
public int getMinimumFractionDigits()
- Overrides:
-
getMinimumFractionDigitsв классеNumberFormat - Returns:
- минимальное количество цифр
- See Also:
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
public void setRoundingMode(RoundingMode roundingMode)
RoundingMode, используемый в этом DecimalFormat.- Overrides:
-
setRoundingModeв классеNumberFormat - Parameters:
-
roundingMode-RoundingModeдля использования - Throws:
-
NullPointerException- еслиroundingModeравно null. - Since:
- 1.6
- See Also:
© 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