Android string format int

Форматирование чисел в Android-приложении: уроки программирования

Проблема

Вам нужно форматировать номера, потому что форматирование по умолчанию с помощью Double.toString() и подобных функций не дает вам достаточного контроля над тем, как отображаются результаты.

Решение

Используйте функцию String.format() или один из подклассов класса NumberFormat .

Обсуждение

Функция printf() была впервые включена в язык программирования С в 1970- х гг. и использовалась на многих других языках, включая Java. Вот простой пример printf() в версии Java SE:

В предыдущем примере можно было бы напечатать что-то вроде этого:

Поскольку мы не используем System.out на платформе Android, вам будет приятно заметить, что вы можете получить ту же строку, которая будет напечатана, для того, чтобы поместить ее в представление, используя:

Если раньше вы не видели функцию printf() , то первым аргументом, очевидно, является строка кода формата, а любые другие аргументы (имя пользователя и время) являются значениями, которые нужно форматировать. Коды формата начинаются со знака процента ( % ) и имеют хотя бы один код для элементарных типов.

В табл. 1 приведены некоторые коды для элементарных типов.

Таблица 1. Некоторые коды для форматирования элементарных типов

Символ

Значение

Строка (конвертировать элементарные значения с использованием значений по умолчанию, конвертировать объекты с помощью функции toString )

Десятичное целое число (int, long)

Число с плавающей точкой (float, double)

Форматы времени/даты, специфичные для Java; См. в конце статьи

Форматирование даты по умолчанию довольно уродливое, поэтому нам часто нужно расширять его. Возможности форматирования printf() на самом деле размещены в классе java.util.Formatter , на который должна быть сделана ссылка.

В отличие от функции printf() на других языках, которые вы, возможно, использовали, все эти форматные процедуры необязательно позволяют ссылаться на аргументы по их числу, помещая число плюс знак доллара после ввода знака % , но до собственно кода форматирования. Например, %2$3.1f означает форматирование второго аргумента как десятичного числа с тремя символами и одной цифрой после десятичной точки. Эта нумерация может использоваться для двух целей: изменить порядок, в котором выводятся аргументы (часто полезны с интернационализацией), и ссылаться на данный аргумент более одного раза. Формат даты/времени t требует после него второго символа, такого как Y для года, m для месяца и т. д. Здесь мы берем аргумент time и извлекаем из него несколько полей:

Это выдаст: July 4, 2010 .

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

Результат может выглядеть так:

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

Общие форматы

В языке Java есть целый пакет java.text , который полон процедур форматирования как общих и гибких, так и всех, что вы можете себе представить. Как и в функции printf() , в нем используется язык форматирования, описанный на онлайн-странице документации. Рассмотрим представление чисел. В Северной Америке число “одна тысяча двадцать четыре и четверть” имеет вид 1, 024.25; в большинстве стран Европы — 1 024,25, а в некоторых других странах это может быть написано как 1.024, 25. Форматирование валют и процентов также отличается большим разнообразием. Попытка отслеживать это сама по себе быстро переутомила бы среднего разработчика программного обеспечения.

Читайте также:  Оптимальные настройки pubg mobile андроид

К счастью, пакет java.text включает класс Locale . Кроме того, среда выполнения Java или Android автоматически устанавливает объект класса Locale по умолчанию на основе среды пользователя; этот код работает как на настольных компьютерах в среде Java, так и на устройствах Android. Чтобы обеспечить форматирование, настроенное для чисел, валют и процентов, класс NumberFormat имеет статические встроенные методы, которые обычно возвращают объект класса Decimal Format с уже созданным шаблоном. Объект класса Decimal Format, соответствующий локализации пользователя, может быть получен с помощью встроенного метода NumberFormat.getlnstance() и управляться с использованием set-методов. Удивительно, но метод setMinimumlntegerDigits() оказывается простым способом создания формата чисел с ведущими нулями. Рассмотрим пример.

Пример 2. Пример форматирования числа

Этот код печатает содержимое массива с помощью экземпляра класса NumberFormat . Мы показываем запуск его как основной программы, а не в приложении для Android, чтобы подчеркнуть эффекты класса NumberFormat .

Например, инструкция $ java NumFormat2 0.0 форматирует нуль как 000.00 ; с аргументом 1.0 она создает представление 001.00 , число 3.142857142857143 она представляет как 003.1429 , а 100.2345678 — как 100.2346 .

Вы также можете создать объект класса DecimalFormat с определенным шаблоном или динамически изменять шаблон с помощью метода applyPattern() . В табл. 2 показаны некоторые из наиболее распространенных шаблонных символов.

Таблица 2. Общие СИМВОЛЫ шаблона DecimalFormat

Символ Значение
# Цифра (подавление ведущих нулей)
0 Цифра (указаны ведущие нули)
. Локализованный десятичный разделитель (десятичная точка)
, Локализованный разделитель групп (запятая на английском языке)
Локализованный минус (знак «минус»)
% Показывает значение в процентах
; Отделяет два формата: первый для положительного значения и второй для отрицательного
Выводит предыдущий символ как таковой
Другие Появляется без обработки

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

Пример 3. Программа демоверсии NumberFormat Java SE

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

Источник

String.format

— Я еще хотела тебе рассказать о методе String.format.

Это статический метод класса String, но очень полезный. Но начну издалека.

Когда тебе нужно вывести в одной строке текст, содержащий значения нескольких переменных, как ты будешь это делать?

— Ну, например, такой:

— Не очень читаемо – не так ли?

— А по-моему – нормально.

— Но вот если имена переменных у тебя будут длинные или нужно будет вызывать методы для получения данных, будет уже не очень читаемо:

Читайте также:  Data local tmp android

— Ну, если так, то да – не очень читаемо.

— Дело в том, что в реальных программах такое встречается очень часто, поэтому я хочу показать тебе, как можно упростить себе жизнь с помощью метода String.format.

— Да говори же скорее, что это за волшебный метод такой?

— Вот как можно записать приведенный выше код:

В метод String.format первым параметром передается строка-шаблон, в которой, на местах, в которые мы хотим подставить значения, стоят специальные символы: %s, %d.

После строки-шаблона передаются параметры, значения которых и будут подставлены на место символов %s, %d.

Если нужно подставить строку мы пишем %s, если число — %d.

Вот тебе пример попроще:

— Да, это очень удобно.

— А ведь еще можно делать и так:

— Гм. Действительно полезный метод, спасибо, Элли.

— Если ты хочешь использовать в методе format другие типы данных, то вот тебе таблица:

Обозначение Тип
%s String
%d целое число: int, long, …
%f вещественное число: float, double
%b boolean
%c char
%t Date
%% Символ %

На самом деле у этих параметров еще есть свои настройки, а у них свои.

Но для начала тебе этого хватит. Если же нет – вот тебе ссылка на официальную документацию:

Источник

Formatting Numeric Print Output

Earlier you saw the use of the print and println methods for printing strings to standard output ( System.out ). Since all numbers can be converted to strings (as you will see later in this lesson), you can use these methods to print out an arbitrary mixture of strings and numbers. The Java programming language has other methods, however, that allow you to exercise much more control over your print output when numbers are included.

The printf and format Methods

The java.io package includes a PrintStream class that has two formatting methods that you can use to replace print and println . These methods, format and printf , are equivalent to one another. The familiar System.out that you have been using happens to be a PrintStream object, so you can invoke PrintStream methods on System.out . Thus, you can use format or printf anywhere in your code where you have previously been using print or println . For example,

The syntax for these two java.io.PrintStream methods is the same:

where format is a string that specifies the formatting to be used and args is a list of the variables to be printed using that formatting. A simple example would be

The first parameter, format , is a format string specifying how the objects in the second parameter, args , are to be formatted. The format string contains plain text as well as format specifiers, which are special characters that format the arguments of Object. args . (The notation Object. args is called varargs, which means that the number of arguments may vary.)

Читайте также:  Готовый андроид для windows

Format specifiers begin with a percent sign (%) and end with a converter. The converter is a character indicating the type of argument to be formatted. In between the percent sign (%) and the converter you can have optional flags and specifiers. There are many converters, flags, and specifiers, which are documented in java.util.Formatter

Here is a basic example:

The %d specifies that the single variable is a decimal integer. The %n is a platform-independent newline character. The output is:

The printf and format methods are overloaded. Each has a version with the following syntax:

To print numbers in the French system (where a comma is used in place of the decimal place in the English representation of floating point numbers), for example, you would use:

An Example

The following table lists some of the converters and flags that are used in the sample program, TestFormat.java , that follows the table.

Converters and Flags Used in TestFormat.java

Converter Flag Explanation
d A decimal integer.
f A float.
n A new line character appropriate to the platform running the application. You should always use %n , rather than \n .
tB A date & time conversion—locale-specific full name of month.
td, te A date & time conversion—2-digit day of month. td has leading zeroes as needed, te does not.
ty, tY A date & time conversion—ty = 2-digit year, tY = 4-digit year.
tl A date & time conversion—hour in 12-hour clock.
tM A date & time conversion—minutes in 2 digits, with leading zeroes as necessary.
tp A date & time conversion—locale-specific am/pm (lower case).
tm A date & time conversion—months in 2 digits, with leading zeroes as necessary.
tD A date & time conversion—date as %tm%td%ty
08 Eight characters in width, with leading zeroes as necessary.
+ Includes sign, whether positive or negative.
, Includes locale-specific grouping characters.
Left-justified..
.3 Three places after decimal point.
10.3 Ten characters in width, right justified, with three places after decimal point.

The following program shows some of the formatting that you can do with format . The output is shown within double quotes in the embedded comment:

The DecimalFormat Class

You can use the java.text.DecimalFormat class to control the display of leading and trailing zeros, prefixes and suffixes, grouping (thousands) separators, and the decimal separator. DecimalFormat offers a great deal of flexibility in the formatting of numbers, but it can make your code more complex.

The example that follows creates a DecimalFormat object, myFormatter , by passing a pattern string to the DecimalFormat constructor. The format() method, which DecimalFormat inherits from NumberFormat , is then invoked by myFormatter —it accepts a double value as an argument and returns the formatted number in a string:

Here is a sample program that illustrates the use of DecimalFormat :

The following table explains each line of output.

Источник

Оцените статью