2017-04-07 3 views
3

Also dieser Code-Schnipsel hat mich in der letzten Stunde oder so gestört. Grundsätzlich besteht die Aufgabe meines Programms darin, Daten in einer Art tabellarischem Format anzuzeigen. Bleibt nur noch, dass die Ausgabe sozusagen schön aussieht. HierTabellarisches Format/printf Abstand in Java Hilfe

ist (Beispiel) Codesegment, das mich in Bezug auf die Formatierung/Syntax des printf Befehl wurde nervt:

System.out.printf("%-20s %-20s %-20s %-20s %-20s%n", 
       "Part #:", "Description:", "Number Sold:", "Price:", "Total:"); 
System.out.println 
     ("---------------------------------------------------------------------------------------------------------------"); 
System.out.printf("%-20s %-20s %-20d %s%-20.2f %s%-20.2f%n", 
       "2304E", "Power Drill", 20, "$",99.99, "$",100*99.99); 

Sache ist, wenn ich versuche, den Befehl auf NetBeans zu laufen, ich scheine immer auf meinem Ausgang zu:

enter image description here

dies ist zwar nicht genau Programm brechend oder eine große Sache ist, dass ein klein wenig Gedankenstrich auf die Zahl rechts unten die Total: Header mich nervt.


Ich habe seit der letzten Stunde versucht, oder so die perfekt Gebrüll der „Total“ ausgerichtet „$ 9.999,00“ double/float-Wert erhalten Header. Jede Hilfe wäre willkommen.

tl; dr - Schauen Sie sich Image Link an, dann schauen Sie sich den Code an. Versucht, die Nummer rechts unten "Total" nach links gedrückt zu bekommen. Hilfe?

+0

Warum Sie es so enden nicht? "...% s% -20.2f% s% -20.2f% n" (ohne den mittleren Platz)? – Tupac

Antwort

0

Extra $ platziert in %s fügt Ihrer Spalte ein weiteres Zeichen hinzu, das es breiter als erwartet 20 Zeichen macht. Aus diesem Grund werden die Zeichen in den nächsten Spalten nach rechts verschoben. Wenn Sie möchten, price und total Spalten immer 20 Zeichen enthalten können Sie

  • reduzieren jeder %-20.2f-%-19.2f (unter der Annahme %s nur ein Zeichen halten),
  • "$99,99" Zeichenfolge zunächst wie String.format("$%.2f",99.99) erzeugen und es als Argument für %-20s (ersetzt %s%-20.2f).

So kann Ihr Code aussehen

System.out.printf("%-20s %-20s %-20d %s%-19.2f %s%-19.2f%n", 
     "2304E", "Power Drill", 20, "$",99.99, "$",100*99.99); 

oder

System.out.printf("%-20s %-20s %-20d %-20s %-20s%n", 
     "2304E", "Power Drill", 20, String.format("$%.2f",99.99), String.format("$%.2f",100*99.99));