Форматируем вывод чисел в Java
В этом уроке мы поговорим о формате вывода чисел в Java. Научимся выводить числа с заданной точностью.
Методы printf и format
Пакет java.io содержит класс PrintStream, который содержит эти два метода, эти методы можно использовать вместо print и println. Объект System.out, который вы уже использовали — это объект PrintStream, поэтому вы можете вызывать методы PrintStream используя System.out. Например:
System.out.format(.....);
Синтаксис методов одинаков:
public PrintStream format(String format, Object... args)
где format — это строка которая определяет шаблон, согласно которому будет происходить форматирование, args — это список переменных, для печати по заданному шаблону. Простой пример:
System.out.format("The value of " + "the float variable is " + "%f, while the value of the " + "integer variable is %d, " + "and the string is %s", floatVar, intVar, stringVar);
Строка format содержит обычный текст и специальные форматирующие символы. Эти символы начинаются со знака процента (%) и заканчиваются конвертером — символом, который определяет тип переменной для форматирования. Пример:
int i = 461012; System.out.format("The value of i is: %d%n", i);
Спецификатор %d определяет одну десятичную целую переменную. %n — переход на новую линию. Данный пример выведет:
The value of i is: 461012
Пример
Следующая таблица содержит некоторые флаги, которые используются в программе ниже.
Конвертер | Флаг | Описание |
---|---|---|
d | Десятичное целое. | |
f | Float. | |
n | Символ новой строки в зависимости от платформы, на которой запущена программа. Вместо \n лучше использовать %n. | |
tB | Дата и время — полное название месяца в зависимости от языка. | |
td, te | Дата и время — 2 цифры дня месяца. td — с ведущими нулями, te — без. | |
ty, tY | Дата и время — ty = год из 2х цифр, tY = год из 4х цифр. | |
tl | Дата и время — часы в 12 часовом формате. | |
tM | Дата и время — минуты из 2х цифр с ведущими нулями. | |
tp | Дата и время — am/pm в зависимости от языка(в нижнем регистре). | |
tm | Дата и время — месяц — 2 цифры с ведущими нулями. | |
tD | Дата и время — дата в формате %tm%td%ty | |
08 | Восемь символов с ведущими нулями при необходимости. | |
+ | Включить знак (положительный или отрицательный). | |
— | По левому краю | |
.3 | Три символа после запятой | |
10.3 | Десять символов до запятой и три — после. |
Примеры использования этих конвертеров вы можете увидеть далее. Эта программа показывает различные варианты использования метода format. Вывод показан в комментариях.
import java.util.Calendar; import java.util.Locale; public class TestFormat { public static void main(String[] args) { long n = 461012; System.out.format("%d%n", n); // --> "461012" System.out.format("%08d%n", n); // --> "00461012" System.out.format("%+8d%n", n); // --> " +461012" System.out.format("%,8d%n", n); // --> " 461,012" System.out.format("%+,8d%n%n", n); // --> "+461,012" double pi = Math.PI; System.out.format("%f%n", pi); // --> "3.141593" System.out.format("%.3f%n", pi); // --> "3.142" System.out.format("%10.3f%n", pi); // --> " 3.142" System.out.format("%-10.3f%n", pi); // --> "3.142" System.out.format(Locale.FRANCE, "%-10.4f%n%n", pi); // --> "3,1416" Calendar c = Calendar.getInstance(); System.out.format("%tB %te, %tY%n", c, c, c); // --> "May 29, 2006" System.out.format("%tl:%tM %tp%n", c, c, c); // --> "2:34 am" System.out.format("%tD%n", c); // --> "05/29/06" } }
Класс DecimalFormat
Вы можете использовать класс DecimalFormat для контроля вывода нулей в десятичных числах. Пример:
import java.text.*; public class DecimalFormatDemo { static public void customFormat(String pattern, double value ) { DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(value); System.out.println(value + " " + pattern + " " + output); } static public void main(String[] args) { customFormat("###,###.###", 123456.789); customFormat("###.##", 123456.789); customFormat("000000.000", 123.78); customFormat("$###,###.###", 12345.67); } }
Данная программа выведет:
123456.789 ###,###.### 123,456.789 123456.789 ###.## 123456.79 123.78 000000.000 000123.780 12345.67 $###,###.### $12,345.67
На этом всё!
Нет комментариев