Форматирование Java System.out.print - PullRequest
4 голосов
/ 24 марта 2012

Вот мой код (ну, часть его). Вопрос, который я имею, состоит в том, могу ли я получить первые 9 чисел, которые будут показаны с ведущими 00 и числами 10 - 99 с лидирующими 0.

Мне нужно показать все 360 ежемесячных платежей, но если у меня не все номера месяцев одинаковой длины, я получаю выходной файл, который продолжает двигаться вправо и компенсирует внешний вид выходных данных. ,

System.out.print((x + 1) + "  ");  // the payment number
System.out.print(formatter.format(monthlyInterest) + "   ");    // round our interest rate
System.out.print(formatter.format(principleAmt) + "     ");
System.out.print(formatter.format(remainderAmt) + "     ");
System.out.println();

Результаты:

8              $951.23               $215.92         $198,301.22                         
9              $950.19               $216.95         $198,084.26                         
10              $949.15               $217.99         $197,866.27                         
11              $948.11               $219.04         $197,647.23  

То, что я хочу увидеть:

008              $951.23               $215.92         $198,301.22                         
009              $950.19               $216.95         $198,084.26                         
010              $949.15               $217.99         $197,866.27                         
011              $948.11               $219.04         $197,647.23  

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

Ответы [ 6 ]

9 голосов
/ 24 марта 2012

Поскольку вы используете средства форматирования для всего остального, просто используйте DecimalFormat:

import java.text.DecimalFormat;

DecimalFormat xFormat = new DecimalFormat("000")
System.out.print(xFormat.format(x + 1) + " ");

Альтернативно, вы можете выполнить всю работу во всей строке, используя printf:

System.out.printf("%03d %s  %s    %s    \n",  x + 1, // the payment number
formatter.format(monthlyInterest),  // round our interest rate
formatter.format(principleAmt),
formatter.format(remainderAmt));
5 голосов
/ 24 марта 2012

Поскольку вы используете Java, printf доступна с версии 1.5

. Вы можете использовать ее следующим образом:

System.out.printf("%03d ", x);

Например:

System.out.printf("%03d ", 5);
System.out.printf("%03d ", 55);
System.out.printf("%03d ", 555);

даст вам

005 055 555

в качестве вывода

См .: System.out.printf и Формат строки синтаксиса

4 голосов
/ 24 марта 2012

Использование System.out.format

3 голосов
/ 24 марта 2012

Что-то нравится

public void testPrintOut() {
    int val1 = 8;
    String val2 = "$951.23";
    String val3 = "$215.92";
    String val4 = "$198,301.22";
    System.out.println(String.format("%03d %7s %7s %11s", val1, val2, val3, val4));

    val1 = 9;
    val2 = "$950.19";
    val3 = "$216.95";
    val4 = "$198,084.26";
    System.out.println(String.format("%03d %7s %7s %11s", val1, val2, val3, val4));
}
0 голосов
/ 27 сентября 2016

Просто используйте \t для пробела.

Пример:

System.out.println(monthlyInterest + "\t")

//as far as the two 0 in front of it just use a if else statement. ex: 
x = x+1;
if (x < 10){
    System.out.println("00" +x);
}
else if( x < 100){
    System.out.println("0" +x);
}
else{
    System.out.println(x);
}

Есть и другие способы сделать это, но это самый простой.

0 голосов
/ 16 сентября 2013

Вы уверены, что хотите «055» вместо «55»?Некоторые программы интерпретируют начальный ноль как восьмеричный, так что он будет читать 055 как (десятичное) 45 вместо (десятичного) 55.

Это должно означать просто сброс флага '0' (заполнение нулями).

например, изменить System.out.printf("%03d ", x); на более простой System.out.printf("%3d ", x);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...