Antworten:
Sie können die printf
Methode wie folgt verwenden:
System.out.printf("%.2f", val);
Kurz gesagt, die %.2f
Syntax weist Java an, Ihre Variable ( val
) mit 2 Dezimalstellen ( .2
) in Dezimaldarstellung einer Gleitkommazahl ( f
) vom Anfang des Formatbezeichners ( %
) zurückzugeben.
Es gibt noch andere Konvertierungszeichen, die Sie verwenden können f
:
d
: Dezimalzahlo
: oktale Ganzzahle
: Gleitkomma in wissenschaftlicher NotationLocale.FRANCE
?
Locale.US
geht zu weit. Wenn Sie ein "neutrales" Gebietsschema für das Falzen von Groß- und Kleinschreibung, das Rendern von Zahlen usw. fest codieren müssen, geben Sie dies an Locale.ROOT
. Dies ist für Text geeignet, der von einem anderen Programm verwendet wird und nicht für menschliche Benutzer gerendert wird. Beachten Sie für Text, der einem Benutzer angezeigt wird, dessen Gebietsschema, unabhängig davon, ob er es explizit angegeben hat oder es die Standardeinstellung ist.
Sie können verwenden DecimalFormat
. Eine Möglichkeit, es zu verwenden:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Eine andere Möglichkeit besteht darin, es im #.##
Format zu erstellen.
Ich finde alle Formatierungsoptionen weniger lesbar als das Aufrufen der Formatierungsmethoden, aber das ist eine Frage der Präferenz.
System.out.printf("%.2f", value)
Syntax passiert ? Ist es noch da?
DecimalFormat
Antworten sah, hatte ich sofort gedacht, dass ich falsch liege, aber danke, dass Sie das klargestellt haben.
df.setMinimumFractionDigits(2);
, um zwei Ziffern zu erzwingen
Ich würde empfehlen, String.format () zu verwenden, wenn Sie den Wert als String
in Ihrem Code benötigen .
Sie können beispielsweise String.format()
Folgendes verwenden:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
Die Ausgabe ist 22,35. Wenn Sie 3 Dezimalstellen benötigen, ändern Sie diese in "% .3f".
Viele Leute haben erwähnt DecimalFormat
. Sie können aber auch verwenden, printf
wenn Sie eine aktuelle Version von Java haben:
System.out.printf("%1.2f", 3.14159D);
Weitere Informationen zur Zeichenfolge im printf-Format finden Sie in den Dokumenten im Formatierer .
Ein einfacher Trick besteht darin, eine kürzere Version Ihrer Variablen zu generieren, indem Sie sie mit z. B. multiplizieren 100
, runden und erneut dividieren 100.0
. Auf diese Weise generieren Sie eine Variable mit 2 Dezimalstellen :
double new_variable = Math.round(old_variable*100) / 100.0;
Dieser "billige Trick" war immer gut genug für mich und funktioniert in jeder Sprache (ich bin keine Java-Person, lerne ihn nur).
Sie können diese Quickcodes unten verwenden, die sich am Ende selbst geändert haben. Fügen Sie hinzu, wie viele Nullen sich nach dem Punkt beziehen
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
Die Variable y1 war zuvor gleich 0,123456789 . Nach dem Code wird nur noch 0.12 angezeigt .
Schauen Sie sich DecimalFormat an
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 sind. Sie sollten sich den Link ansehen, um genau das gewünschte Format zu erhalten (z. B. ob Sie nachgestellte Nullen möchten).
Im Folgenden finden Sie Code, wie Sie eine Ausgabe von Float-Daten mit 2 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
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);
}
}
Tun String str = System.out.printf("%.2f", val).replace(",", ".");
Sie dies einfach, 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 durchführenfloat f = Float.parseFloat(str);
Ein Problem, das mich eine Stunde oder länger beschäftigt hat DecimalFormat
- Es behandelt Double- und Float-Eingaben unterschiedlich. Auch eine Änderung des RoundingMode hat nicht geholfen. Ich bin kein Experte, dachte aber, es könnte jemandem wie mir helfen. Endete Math.round
stattdessen mit. 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
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);
}
}
String.format(java.util.Locale.US,"%.2f", val);