Java-Dezimalformatierung mit String.format?

73

Ich muss einen Dezimalwert in eine Zeichenfolge formatieren, in der immer mindestens 2 Dezimalstellen und höchstens 4 angezeigt werden.

So zum Beispiel

"34.49596" would be "34.4959" 
"49.3" would be "49.30"

Kann dies mit dem Befehl String.format erfolgen?
Oder gibt es eine einfachere / bessere Möglichkeit, dies in Java zu tun?

Reichtum
quelle

Antworten:

84

Sie möchten java.text.DecimalFormat.

DecimalFormat df = new DecimalFormat("0.00##");
String result = df.format(34.4959);
Richard Campbell
quelle
3
Folgen Sie dem gleichen Beispiel, Sie erhalten das falsche Ergebnis. Für dieses Beispiel müssen Sie den RoundingMode.DOWN verwenden. Andernfalls wird HALF_EVEN verwendet. Nein, aber negativ.
Adeel Ansari
158

Ja, Sie können es tun mit String.format:

String result = String.format("%.2f", 10.0 / 3.0);
// result:  "3.33"

result = String.format("%.3f", 2.5);
// result:  "2.500"
Mostar
quelle
21
Dies ist möglicherweise nicht die richtige Antwort auf die gestellte Frage, aber es ist die Antwort, die ich hier gefunden habe. Vielen Dank!
Milosmns
41

Hier ist ein kleines Code-Snippet, das die Arbeit erledigt:

double a = 34.51234;

NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(4);
df.setRoundingMode(RoundingMode.DOWN);

System.out.println(df.format(a));
Yuval Adam
quelle
Keine Negative, aber Ihr Code schlägt beim ersten Beispiel des Originalplakats fehl. Sie müssen RoundingMode.DOWN verwenden, andernfalls wird vermutlich standardmäßig HALF_EVEN verwendet.
Adeel Ansari
3

java.text.NumberFormat ist wahrscheinlich das, was Sie wollen.

Cagcowboy
quelle
1

Sie möchten java.text.DecimalFormat

Duffymo
quelle
1

NumberFormat und DecimalFormat sind definitiv das, was Sie wollen. Beachten Sie auch die NumberFormat.setRoundingMode()Methode. Sie können damit steuern, wie beim Formatieren Rundungen oder Kürzungen angewendet werden.

Brian Clapper
quelle