|
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 | любые другие символы могут использоваться в префиксе или суффиксе |
| ' | используемый, чтобы заключить специальные символы в кавычки в префиксе или суффиксе |