Spec-Zone .ru
спецификации, руководства, описания, API
|
Можно использовать DecimalFormat
class, чтобы отформатировать десятичные числа в специфичные для локали строки. Этот class позволяет Вам управлять дисплеем начальных и конечных нулей, префиксов и суффиксов, группируя (тысячи) разделителей, и десятичного разделителя. Если Вы хотите изменить символы форматирования, такие как десятичный разделитель, можно использовать DecimalFormatSymbols
в соединении с DecimalFormat
class. Эти классы предлагают большую гибкость в форматировании чисел, но они могут сделать Ваш код более сложным.
Текст, который следует примерам использования, которые демонстрируют DecimalFormat
и DecimalFormatSymbols
классы. Примеры кода в этом материале из вызванного примера программы DecimalFormatDemo
.
Вы определяете свойства форматирования DecimalFormat
с образцом String
. Образец определяет то, на что похоже отформатированное число. Для полного описания синтаксиса образца см. Синтаксис Образца Числового формата.
Пример, который следует, создает средство форматирования, передавая образец String
к DecimalFormat
конструктор. format
метод принимает a double
оцените как параметр и возвраты отформатированное число в a String
:
DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(value); System.out.println(value + " " + pattern + " " + output);
Вывод для предыдущих строк кода описывается в следующей таблице. value
число, a double
, это должно быть отформатировано. pattern
String
это определяет свойства форматирования. output
, который является a String
, представляет отформатированное число.
value |
pattern |
output |
Объяснение |
---|---|---|---|
123456.789 | ###,###.### | 123,456.789 | Знак фунта (#) обозначает цифру, запятая является заполнителем для группирующегося разделителя, и период является заполнителем для десятичного разделителя. |
123456.789 | ###.## | 123456.79 | value имеет три цифры направо от десятичной точки, но pattern имеет только два. format метод обрабатывает это, окружая. |
123.78 | 000000.000 | 000123.780 | pattern определяет начальные и конечные нули, потому что 0 символов используются вместо знака фунта (#). |
12345.67 | $###,###.### | $12,345.67 | Первый символ в pattern знак доллара ($). Отметьте, что это сразу предшествует крайней левой цифре в отформатированном output . |
12345.67 | \u00A5###,###.### | ¥12,345.67 | pattern определяет, что валюта расписывается за Японскую иену (¥) с 00A5 значения Unicode. |
Предыдущий пример создаваемый a DecimalFormat
объект для значения по умолчанию Locale
. Если Вы хотите a DecimalFormat
объект для не по умолчанию Locale
, Вы инстанцируете a NumberFormat
и затем бросок это к DecimalFormat
. Вот пример:
NumberFormat nf = NumberFormat.getNumberInstance(loc); DecimalFormat df = (DecimalFormat)nf; df.applyPattern(pattern); String output = df.format(value); System.out.println(pattern + " " + output + " " + loc.toString());
Выполнение предыдущего примера кода приводит к выводу, который следует. Отформатированное число, которое находится во втором столбце, меняется Locale
:
###,###.### 123,456.789 en_US ###,###.### 123.456,789 de_DE ###,###.### 123 456,789 fr_FR
До сих пор образцы форматирования, обсужденные здесь, следуют за соглашениями американского английского языка. Например, в образце ###,###.## запятая является тысячами разделителя, и период представляет десятичную точку. Это соглашение прекрасно, при условии, что Ваши конечные пользователи не представляются ему. Однако, некоторые приложения, такие как электронные таблицы и генераторы отчетов, позволяют конечным пользователям определять свои собственные образцы форматирования. Для этих приложений образцы форматирования, определенные конечными пользователями, должны использовать локализованную нотацию. В этих случаях Вы будете хотеть вызвать applyLocalizedPattern
метод на DecimalFormat
объект.
Можно использовать DecimalFormatSymbols class, чтобы изменить символы, которые появляются в отформатированных числах, произведенных format
метод. Эти символы включают десятичный разделитель, группирующийся разделитель, знак "минус", и знак процента, среди других.
Следующий пример демонстрирует DecimalFormatSymbols
class, применяя странный формат к числу. Необычный формат является результатом звонков setDecimalSeparator
, setGroupingSeparator
, и setGroupingSize
методы.
DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(currentLocale); unusualSymbols.setDecimalSeparator('|'); unusualSymbols.setGroupingSeparator('^'); String strange = "#,##0.###"; DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols); weirdFormatter.setGroupingSize(4); String bizarre = weirdFormatter.format(12345.678); System.out.println(bizarre);
Когда выполнено, этот пример печатает число в причудливом формате:
1^2345|678
Можно разработать свои собственные образцы формата для чисел следующим правила, определенные следующей схемой BNF:
pattern := subpattern{;subpattern} subpattern := {prefix}integer{.fraction}{suffix} prefix := '\\u0000'..'\\uFFFD' - specialCharacters suffix := '\\u0000'..'\\uFFFD' - specialCharacters integer := '#'* '0'* '0' fraction := '0'* '#'*
Нотация, используемая в предыдущей схеме, объясняется в следующей таблице:
Нотация | Описание |
---|---|
X* |
0 или больше экземпляров X |
(X | Y) |
или X или Y |
X..Y |
любой символ от X до Y, включительно |
S - T |
символы в S, кроме тех в T |
{X} |
X является дополнительным |
В предыдущей схеме BNF первый подобразец определяет формат для положительных чисел. Второй подобразец, который является дополнительным, определяет формат для отрицательных чисел.
Хотя не отмеченный в схеме BNF, запятая может появиться в пределах целочисленной части.
В пределах подобразцов Вы определяете форматирование со специальными символами. Эти символы описываются в следующей таблице:
Символ | Описание |
---|---|
0 | цифра |
# | цифра, нуль показывает как отсутствующий |
. | заполнитель для десятичного разделителя |
, | заполнитель для того, чтобы сгруппировать разделитель |
E | разделяет мантиссу и экспоненту для экспоненциальных форматов |
; | разделяет форматы |
- | значение по умолчанию отрицательный префикс |
% | умножьтесь на 100 и шоу как процент |
? | умножьтесь на 1000 и покажите согласно mille |
¤ | знак валюты; замененный обозначением денежной единицы; если удвоено, замененный международным обозначением денежной единицы; если существующий в образце, денежно-кредитный десятичный разделитель используется вместо десятичного разделителя |
X | любые другие символы могут использоваться в префиксе или суффиксе |
' | используемый, чтобы заключить специальные символы в кавычки в префиксе или суффиксе |