Kann ich das mit System.out.print
machen?
Sie können die printf
-Methode wie folgt verwenden:
System.out.printf("%.2f", val);
Kurz gesagt, die Syntax %.2f
weist Java an, Ihre Variable (val
) mit 2 Dezimalstellen (.2
) in Dezimaldarstellung einer Gleitkommazahl (f
) vom Anfang des Formatbezeichners (%
) zurückzugeben.
Neben f
können Sie noch andere Konvertierungszeichen verwenden:
d
: dezimale ganze Zahlo
: oktale ganze Zahle
: Gleitkomma in wissenschaftlicher NotationSie können DecimalFormat
verwenden. Eine Möglichkeit, es zu benutzen:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Eine andere ist, es mit dem #.##
-Format zu erstellen.
Ich finde alle Formatierungsoptionen weniger lesbar als das Aufrufen der Formatierungsmethoden. Dies ist jedoch eine Frage der Präferenz.
Ich würde empfehlen, String.format () zu verwenden, wenn Sie den Wert als String
in Ihrem Code benötigen.
Beispielsweise können Sie String.format()
auf folgende Weise verwenden:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
Viele Leute haben DecimalFormat
erwähnt. Sie können jedoch auch printf
verwenden, wenn Sie eine aktuelle Version von Java verwenden:
System.out.printf("%1.2f", 3.14159D);
Weitere Informationen zur printf-Formatzeichenfolge finden Sie in den Dokumenten des Formatter .
Ein einfacher Trick besteht darin, eine kürzere Version Ihrer Variablen zu generieren, indem Sie sie mit z. 100
, rundet es und teilt es erneut durch 100.0
. Auf diese Weise erzeugen Sie eine Variable mit 2 Nachkommastellen :
double new_variable = Math.round(old_variable*100) / 100.0;
Dieser "billige Trick" war für mich immer gut genug und funktioniert in jeder Sprache (ich bin keine Java-Person, lerne es einfach).
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
Die Ausgabe ist 22.35 . Wenn Sie 3 Dezimalpunkte benötigen, ändern Sie sie in "% .3f".
Siehe DecimalFormat
Hier ist ein Beispiel aus dem Tutorial:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
Wenn Sie ein Muster wie "###. ##" wählen, erhalten Sie zwei Dezimalstellen, und ich denke, dass die Werte aufgerundet werden. Sie sollten sich den Link ansehen, um das genaue Format zu erhalten, das Sie möchten (z. B. ob Sie nachgestellte Nullen möchten).
OK - str zu schweben.
package test;
import Java.text.DecimalFormat;
public class TestPtz {
public static void main(String[] args) {
String preset0 = "0.09,0.20,0.09,0.07";
String[] thisto = preset0.split(",");
float a = (Float.valueOf(thisto[0])).floatValue();
System.out.println("[Original]: " + a);
a = (float) (a + 0.01);
// Part 1 - for display / debug
System.out.printf("[Local]: %.2f \n", a);
// Part 2 - when value requires to be send as it is
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
System.out.println("[Remote]: " + df.format(a));
}
}
Ausgabe:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
kleines einfaches Programm zur Demonstration:
import Java.io.*;
import Java.util.Scanner;
public class twovalues {
public static void main(String args[]) {
float a,b;
Scanner sc=new Scanner(System.in);
System.out.println("Enter Values For Calculation");
a=sc.nextFloat();
b=sc.nextFloat();
float c=a/b;
System.out.printf("%.2f",c);
}
}
Nachfolgend finden Sie Code, wie Sie eine Ausgabe von Float-Daten mit zwei Dezimalstellen in Java anzeigen können:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
Ein Problem, das mich für eine Stunde oder länger beschäftigte: DecimalFormat
- Es behandelt Double- und Float-Eingaben unterschiedlich. Auch der Wechsel von RoundingMode hat nicht geholfen. Ich bin kein Experte, aber dachte, es könnte jemandem wie mir helfen. Endete stattdessen mit Math.round
. Siehe unten:
DecimalFormat df = new DecimalFormat("#.##");
double d = 0.7750;
System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
float f = 0.7750f;
System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
// change the RoundingMode
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));
Ausgabe:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
Führen Sie einfach String str = System.out.printf("%.2f", val).replace(",", ".");
aus, wenn Sie sicherstellen möchten, dass unabhängig vom Gebietsschema des Benutzers immer ein "." Angezeigt wird. als Dezimaltrennzeichen. Dies ist ein Muss, wenn Sie Ihr Programm nicht zum Absturz bringen möchten, wenn Sie später eine Konvertierung wie float f = Float.parseFloat(str);
durchführen.
Versuche dies:-
private static String getDecimalFormat(double value) {
String getValue = String.valueOf(value).split("[.]")[1];
if (getValue.length() == 1) {
return String.valueOf(value).split("[.]")[0] +
"."+ getValue.substring(0, 1) +
String.format("%0"+1+"d", 0);
} else {
return String.valueOf(value).split("[.]")[0]
+"." + getValue.substring(0, 2);
}
}