2010-01-29 9 views
9

In Java, ist es möglich, String.format zu verwenden, um nur eine Dezimalzahl anzuzeigen, wenn tatsächlich ein Bedarf besteht? Zum Beispiel, wenn ich dies tun:Kann String.format für einen bedingten Dezimalpunkt verwendet werden?

String.format("%.1f", amount); 

es formatiert: "1.2222" -> "1.2" "1,000" -> "1.0" etc,

aber im zweiten Fall (1.000) Ich möchte es nur "1" zurückgeben. Ist das mit String.format möglich, oder muss ich einen DecimalFormatter verwenden?

Wenn ich einen Dezimalformatierer verwenden muss, muss ich einen separaten DecimalFormatter für jeden gewünschten Formattyp erstellen? (Bis zu 1 Dezimalstelle, bis zu 2 Dezimalstellen usw.)

Antwort

10

Nein, Sie müssen verwenden DecimalFormat:

final DecimalFormat f = new DecimalFormat("0.##"); 
System.out.println(f.format(1.3)); 
System.out.println(f.format(1.0)); 

Legen Sie so viele # s, wie Sie möchten; Das DecimalFormat druckt nur so viele Ziffern, wie es für signifikant hält, bis zur Anzahl von # s.

3

Dies könnte Sie bekommen, was Sie suchen; Ich bin mir nicht sicher über die Anforderungen oder den Kontext Ihrer Anfrage.

float f; 
f = 1f 
System.out.printf(f==Math.round(f) ? "%d\n" : "%s\n", f); //1 
f = 1.555f 
System.out.printf(f==Math.round(f) ? "%d\n" : "%s\n", f); //1.555 

Arbeitete großartig für das, was ich brauchte.

FYI, oben, System.out.printf (fmt, x) ist wie System.out.print (String.format (fmt, x)

Verwandte Themen