web-dev-qa-db-fra.com

Mise en forme Java System.out.print

Voici mon code (enfin, une partie). La question que je me pose est la suivante: puis-je obtenir les 9 premiers chiffres avec un 00 en tête et les chiffres 10 à 99 avec un 0 en tête?.

Je dois montrer tous les 360 paiements mensuels, mais si je n'ai pas tous les chiffres du mois à la même longueur, alors je me retrouve avec un fichier de sortie qui continue de se déplacer vers la droite et qui compense l'aspect de la sortie. 

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();

Résultats:

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  

Ce que je veux voir c'est:

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  

De quel autre code avez-vous besoin dans ma classe pour vous aider?

4
RazorSharp

Puisque vous utilisez des formateurs pour le reste, utilisez simplement DecimalFormat:

import Java.text.DecimalFormat;

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

Alternative vous pouvez faire tout le travail dans toute la ligne en utilisant 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));
9
Adam

Puisque vous utilisez Java, printf est disponible à partir de la version 1.5.

Vous pouvez l'utiliser comme ça

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

Par exemple:

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

Te donnera

005 055 555

en sortie

Voir: System.out.printf et Format Syntaxe des chaînes

5
Jomoos
4
Hari Menon

Quelque chose aime ça

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));
}
3
Xuvi

Êtes-vous sûr de vouloir "055" par opposition à "55"? Certains programmes interprètent un zéro initial comme signifiant octal, de sorte qu'il se lirait comme 055 comme (décimal) 45 au lieu de (décimal) 55.

Cela devrait simplement signifier l’abandon du drapeau «0» (remplissage zéro). 

par exemple, remplacez System.out.printf("%03d ", x); par la plus simple System.out.printf("%3d ", x);

0
user2784358

Utilisez simplement \t pour l’espacer.

Exemple:

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);
}

Il y a d'autres façons de le faire, mais c'est la plus simple.

0
michael hocking