Класс 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, следует проверить тип NumberFormat, возвращенного фабричным методом, прежде чем преобразовывать его в 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.
Ограничения на количество целых и дробных цифр
Ограничения на количество целых и дробных цифр задаются применениемpattern или одним из соответствующих методов-сеттеров DecimalFormat, например setMinimumFractionDigits(int). Эти ограничения не влияют на поведение при анализе. Специальные значения
Не число (
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)не применимо (не локализуется) Префикс или суффикс Знак валюты, заменяемый символом валюты. При удвоении заменяется международным символом валюты. Если присутствует в шаблоне, вместо десятичного разделителя и разделителя групп разрядов используются денежные разделители. ' (U+0027)не применимо (не локализуется) Префикс или суффикс Используется для заключения специальных символов в префиксе или суффиксе в кавычки. Например, "'#'#"форматирует 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 x 10^3. Мантисса часто находится в диапазоне 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" - Экспоненциальные шаблоны не могут содержать разделители групп разрядов.
- Требования к реализации:
- При форматировании
Number, отличного отBigIntegerиBigDecimal, в качестве верхнего предела для целых цифр используется309, а для дробных цифр —340. Это происходит даже в том случае, если один из методов-геттеровDecimalFormat, напримерgetMinimumFractionDigits(), возвращает численно большее значение. - С версии:
- 1.1
- Внешние спецификации
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе NumberFormat
NumberFormat.Field, NumberFormat.Style
Краткое описание полей
Поля, объявленные в классе 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, для отладки. |
Методы, объявленные в классе NumberFormat
format, format, getAvailableLocales, getCompactNumberInstance, getCompactNumberInstance, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, isGroupingUsed, isParseIntegerOnly, parse, parseObject, setGroupingUsed, setParseIntegerOnly
Методы, объявленные в классе 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()имеет значение false (по умолчанию), большинство целых значений возвращаются как объектыLongнезависимо от способа их записи:"17"и"17.000"разбираются вLong(17). Значения, не помещающиеся вLong, возвращаются какDouble. К ним относятся значения с дробной частью, бесконечные значения,NaNи значение -0.0.DecimalFormatне определяет, возвращать лиDoubleилиLong, по наличию десятичного разделителя в исходной строке. Иначе целые числа, превышающие разрядность мантиссы типа double, например"-9,223,372,036,854,775,808.00", нельзя было бы разобрать точно.Вызывающий код может использовать методы
Number, такие какdoubleValue,longValueи т. д., чтобы получить нужный тип. - Если
isParseBigDecimal()имеет значение true, значения возвращаются как объектыBigDecimal. Это значения, создаваемые методомBigDecimal(String)для соответствующих строк в независимом от локали формате. Особые значения — отрицательная и положительная бесконечность и NaN — возвращаются как экземплярыDouble, содержащие значения соответствующих константDouble.
DecimalFormat разбирает все символы Юникода, представляющие десятичные цифры согласно определению Character.digit(). Кроме того, DecimalFormat также распознает как цифры десять последовательных символов, начиная с локализованного нуля, определенного в объекте DecimalFormatSymbols.
- Указано в:
-
parseв классеNumberFormat - Параметры:
-
text— строка для разбора -
pos— объектParsePositionс информацией об индексе и индексе ошибки, описанной выше. - Возвращает:
- разобранное значение или
null, если разбор завершился неудачей - Вызывает исключение:
-
NullPointerException— еслиtextилиposравно null. - См. также:
getDecimalFormatSymbols
public DecimalFormatSymbols getDecimalFormatSymbols()
- Возвращает:
- копию требуемых DecimalFormatSymbols
- См. также:
setDecimalFormatSymbols
public void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols)
- Параметры:
-
newSymbols— требуемые DecimalFormatSymbols - См. также:
getPositivePrefix
public String getPositivePrefix()
Примеры: +123, $123, sFr123
- Возвращает:
- положительный префикс
setPositivePrefix
public void setPositivePrefix(String newValue)
Примеры: +123, $123, sFr123
- Параметры:
-
newValue— новый положительный префикс. Не должен быть равен null. - Вызывает исключение:
-
NullPointerException— еслиnewValueравноnull
getNegativePrefix
public String getNegativePrefix()
Примеры: -123, ($123) (с отрицательным суффиксом), sFr-123
- Возвращает:
- отрицательный префикс
setNegativePrefix
public void setNegativePrefix(String newValue)
Примеры: -123, ($123) (с отрицательным суффиксом), sFr-123
- Параметры:
-
newValue— новый отрицательный префикс. Не должен быть равен null. - Вызывает исключение:
-
NullPointerException— еслиnewValueравноnull
getPositiveSuffix
public String getPositiveSuffix()
Пример: 123%
- Возвращает:
- положительный суффикс
setPositiveSuffix
public void setPositiveSuffix(String newValue)
Пример: 123%
- Параметры:
-
newValue— новый положительный суффикс. Не должен быть равен null. - Вызывает исключение:
-
NullPointerException— еслиnewValueравноnull
getNegativeSuffix
public String getNegativeSuffix()
Примеры: -123%, ($123) (с положительными суффиксами)
- Возвращает:
- отрицательный суффикс
setNegativeSuffix
public void setNegativeSuffix(String newValue)
Пример: 123%
- Параметры:
-
newValue— новый отрицательный суффикс. Не должен быть равен null. - Вызывает исключение:
-
NullPointerException— еслиnewValueравноnull
getMultiplier
public int getMultiplier()
- Возвращает:
- множитель
- См. также:
setMultiplier
public void setMultiplier(int newValue)
U+2030». Пример: при множителе 100 значение 1.23 форматируется как «123», а строка «123» разбирается как 1.23. Если isParseIntegerOnly() возвращает true, строка «123» разбирается как 1.
- Параметры:
-
newValue— новый множитель - См. также:
getGroupingSize
public int getGroupingSize()
setGroupingUsed(false).- Возвращает:
- размер группировки
- См. также:
setGroupingSize
public void setGroupingSize(int newValue)
setGroupingUsed(false). Переданное значение преобразуется в byte, что может привести к потере данных. Для отрицательных значений или значений больше Byte.MAX_VALUE будет выброшено исключение IllegalArgumentException.
- Параметры:
-
newValue— новый размер группировки - Вызывает исключение:
-
IllegalArgumentException— еслиnewValueотрицательно или большеByte.MAX_VALUE - См. также:
isDecimalSeparatorAlwaysShown
public boolean isDecimalSeparatorAlwaysShown()
Пример: десятичный разделитель ВКЛ.: 12345 → 12345.; ВЫКЛ.: 12345 → 12345
- Возвращает:
-
true, если десятичный разделитель отображается всегда; в противном случае —false
setDecimalSeparatorAlwaysShown
public void setDecimalSeparatorAlwaysShown(boolean newValue)
Пример: десятичный разделитель ВКЛ.: 12345 → 12345.; ВЫКЛ.: 12345 → 12345
- Параметры:
-
newValue—true, если десятичный разделитель отображается всегда; в противном случае —false
isStrict
public boolean isStrict()
true, если этот формат разбирает числа в строгом режиме; в противном случае — false.- Переопределяет:
-
isStrictв классеNumberFormat - Возвращает:
-
true, если этот формат разбирает числа в строгом режиме; в противном случае —false - Начиная с:
- 23
- См. также:
setStrict
public void setStrict(boolean strict)
- Переопределяет:
-
setStrictв классеNumberFormat - Параметры:
-
strict—true, если разбор следует выполнять в строгом режиме; в противном случае —false - Начиная с:
- 23
- См. также:
isParseBigDecimal
public boolean isParseBigDecimal()
parse(java.lang.String, java.text.ParsePosition) значение BigDecimal. Значение по умолчанию — false.- Возвращает:
-
true, если метод разбора возвращает BigDecimal; в противном случае —false - Начиная с:
- 1.5
- См. также:
setParseBigDecimal
public void setParseBigDecimal(boolean newValue)
parse(java.lang.String, java.text.ParsePosition) значение BigDecimal.- Параметры:
-
newValue—true, если метод разбора возвращает BigDecimal; в противном случае —false - Начиная с:
- 1.5
- См. также:
clone
public Object clone()
- Переопределяет:
-
cloneв классеNumberFormat - Возвращает:
- копию этого экземпляра.
- См. также:
equals
public boolean equals(Object obj)
DecimalFormat на равенство. Возвращает true, если объект также является DecimalFormat и оба формата одинаково форматируют любое значение.- Переопределяет:
-
equalsв классеNumberFormat - Требования к реализации:
- Этот метод проверяет равенство, определяя идентичность класса на основе
getClass(), а неinstanceof. Поэтому в методах equals подклассов ни один экземпляр этого класса не должен считаться равным экземпляру подкласса. - Параметры:
-
obj— объект для сравнения на равенство - Возвращает:
-
true, если заданный объект равен этомуDecimalFormat - См. также:
hashCode
public int hashCode()
DecimalFormat.- Переопределяет:
-
hashCodeв классеNumberFormat - Требования к реализации:
- Этот метод вычисляет хэш-код, используя значения, возвращаемые методами
getPositivePrefix()иNumberFormat.hashCode(). - Возвращает:
- хэш-код этого
DecimalFormat - См. также:
toString
toPattern
public String toPattern()
- Возвращает:
- строку шаблона
- См. также:
toLocalizedPattern
public String toLocalizedPattern()
- Возвращает:
- локализованную строку шаблона
- См. также:
applyPattern
public void applyPattern(String pattern)
Максимальное количество целых цифр обычно не определяется шаблоном. Подробнее см. примечание в разделе Patterns. Для отрицательных чисел используйте второй шаблон, отделив его точкой с запятой
Пример "#,#00.0#" → 1,234.56
Это означает минимум 2 целые цифры, 1 цифру дробной части и максимум 2 цифры дробной части.
Пример: "#,#00.0#;(#,#00.0#)" для отрицательных чисел в скобках.
В шаблонах для отрицательных чисел минимальное и максимальное количество цифр игнорируется; предполагается, что эти значения заданы в шаблоне для положительных чисел.
- Параметры:
-
pattern— новый шаблон - Выбрасывает:
-
NullPointerException— еслиpatternравно null -
IllegalArgumentException— если заданный шаблон недопустим.
applyLocalizedPattern
public void applyLocalizedPattern(String pattern)
Максимальное количество целых цифр обычно не определяется шаблоном. Подробнее см. примечание в разделе Patterns. Для отрицательных чисел используйте второй шаблон, отделив его точкой с запятой
Пример "#,#00.0#" → 1,234.56
Это означает минимум 2 целые цифры, 1 цифру дробной части и максимум 2 цифры дробной части.
Пример: "#,#00.0#;(#,#00.0#)" для отрицательных чисел в скобках.
В шаблонах для отрицательных чисел минимальное и максимальное количество цифр игнорируется; предполагается, что эти значения заданы в шаблоне для положительных чисел.
- Параметры:
-
pattern— новый шаблон - Выбрасывает:
-
NullPointerException— еслиpatternравно null -
IllegalArgumentException— если заданный шаблон недопустим.
setMaximumIntegerDigits
public void setMaximumIntegerDigits(int newValue)
maximumIntegerDigits должно быть ≥ minimumIntegerDigits. Если новое значение
maximumIntegerDigits меньше текущего значения minimumIntegerDigits, то minimumIntegerDigits также будет установлено в новое значение. Отрицательные входные значения заменяются на 0.- Переопределяет:
-
setMaximumIntegerDigitsв классеNumberFormat - Параметры:
-
newValue— максимальное количество отображаемых целых цифр. - См. также:
setMinimumIntegerDigits
public void setMinimumIntegerDigits(int newValue)
minimumIntegerDigits должно быть ≤ maximumIntegerDigits. Если новое значение minimumIntegerDigits превышает текущее значение maximumIntegerDigits, то
maximumIntegerDigits также будет установлено в новое значение. Отрицательные входные значения заменяются на 0.- Переопределяет:
-
setMinimumIntegerDigitsв классеNumberFormat - Параметры:
-
newValue— минимальное количество отображаемых целых цифр. - См. также:
setMaximumFractionDigits
public void setMaximumFractionDigits(int newValue)
maximumFractionDigits должно быть ≥ minimumFractionDigits. Если новое значение maximumFractionDigits меньше текущего значения minimumFractionDigits, то minimumFractionDigits также будет установлено в новое значение. Отрицательные входные значения заменяются на 0.- Переопределяет:
-
setMaximumFractionDigitsв классеNumberFormat - Параметры:
-
newValue— максимальное количество отображаемых дробных цифр. - См. также:
setMinimumFractionDigits
public void setMinimumFractionDigits(int newValue)
minimumFractionDigits должно быть ≤ maximumFractionDigits. Если новое значение
minimumFractionDigits превышает текущее значение
maximumFractionDigits, то maximumFractionDigits также будет установлено в новое значение. Отрицательные входные значения заменяются на 0.- Переопределяет:
-
setMinimumFractionDigitsв классеNumberFormat - Параметры:
-
newValue— минимальное количество отображаемых дробных цифр. - См. также:
getMaximumIntegerDigits
public int getMaximumIntegerDigits()
В отличие от других ограничений на количество цифр, maximumIntegerDigits не обновляется, если DecimalFormats создаётся или обновляется с помощью строкового шаблона.
- Переопределяет:
-
getMaximumIntegerDigitsв классеNumberFormat - Возвращает:
- максимальное количество цифр
- См. также:
getMinimumIntegerDigits
public int getMinimumIntegerDigits()
- Переопределяет:
-
getMinimumIntegerDigitsв классеNumberFormat - Возвращает:
- минимальное количество цифр
- См. также:
getMaximumFractionDigits
public int getMaximumFractionDigits()
- Переопределяет:
-
getMaximumFractionDigitsв классеNumberFormat - Возвращает:
- максимальное количество цифр.
- См. также:
getMinimumFractionDigits
public int getMinimumFractionDigits()
- Переопределяет:
-
getMinimumFractionDigitsв классеNumberFormat - Возвращает:
- минимальное количество цифр
- См. также:
getCurrency
public Currency getCurrency()
DecimalFormatSymbols.getCurrency у символов этого числового формата.- Переопределяет:
-
getCurrencyв классеNumberFormat - Возвращает:
- валюту, используемую этим десятичным форматом, или
null - Начиная с версии:
- 1.4
setCurrency
public void setCurrency(Currency currency)
DecimalFormatSymbols.setCurrency у символов этого числового формата.- Переопределяет:
-
setCurrencyв классеNumberFormat - Параметры:
-
currency— новая валюта, используемая этим десятичным форматом - Выбрасывает:
-
NullPointerException— еслиcurrencyравно null - Начиная с версии:
- 1.4
getRoundingMode
public RoundingMode getRoundingMode()
RoundingMode, используемый в этом DecimalFormat.- Переопределяет:
-
getRoundingModeв классеNumberFormat - Возвращает:
RoundingMode, используемый этим DecimalFormat.- Начиная с версии:
- 1.6
- См. также:
setRoundingMode
public void setRoundingMode(RoundingMode roundingMode)
RoundingMode, используемый в этом DecimalFormat.- Переопределяет:
-
setRoundingModeв классеNumberFormat - Параметры:
-
roundingMode—RoundingMode, который будет использоваться - Выбрасывает:
-
NullPointerException— еслиroundingModeравно null. - Начиная с версии:
- 1.6
- См. также:
© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/text/DecimalFormat.html