Форматируем вывод чисел в Java

12-10-21 Java 0

В этом уроке мы поговорим о формате вывода чисел в 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

Пример

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

Конвертеры и флаги используемые в TestFormat.java
Конвертер Флаг Описание
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

На этом всё!

Хочешь получать статьи на почту?

Подпишись на обновления!
* Ваш email не будет разглашен/продан. Вы сможете отписаться в любое время.

Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *