Ich habe einige Probleme beim Formatieren der Dezimalstellen eines Doppels. Wenn ich einen doppelten Wert habe, z. B. 4.0, wie formatiere ich die Dezimalstellen so, dass sie stattdessen 4,00 betragen?
Ich habe einige Probleme beim Formatieren der Dezimalstellen eines Doppels. Wenn ich einen doppelten Wert habe, z. B. 4.0, wie formatiere ich die Dezimalstellen so, dass sie stattdessen 4,00 betragen?
Antworten:
Eine Möglichkeit wäre die Verwendung von NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Ausgabe:
4.00
Mit Java 8 können Sie die format
Methode .. verwenden: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
wird für den floating
Punktwert verwendet.2
Nach Dezimalstelle wird die Anzahl der Nachkommastellen angegeben .
Für die meisten Java-Versionen können Sie Folgendes verwenden DecimalFormat
:
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Verwenden Sie String.format :
String.format("%.2f", 4.52135);
Gemäß Dokumentation:
Das immer verwendete Gebietsschema ist das von
Locale.getDefault()
.
Mit String.format können Sie Folgendes tun:
double price = 52000;
String.format("$%,.2f", price);
Beachten Sie das Komma, das dies von der Antwort von @ Vincent unterscheidet
Ausgabe:
$52,000.00
Eine gute Quelle für die Formatierung ist die offizielle Java-Seite zu diesem Thema
Sie können immer die statische Methode verwenden printf from System.out
- Sie implementieren dann den entsprechenden Formatierer. Dies spart Heap-Speicherplatz, für den andere Beispiele erforderlich waren.
Ex:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Spart Heap-Speicherplatz, was ein ziemlich großer Bonus ist. Dennoch bin ich der Meinung, dass dieses Beispiel viel einfacher zu handhaben ist als jede andere Antwort, zumal die meisten Programmierer die printf-Funktion von C kennen (Java ändert die Funktion / Methode jedoch geringfügig).
out
ist das PrintStream
.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Eine alternative Methode ist die Verwendung der setMinimumFractionDigits
Methode aus der NumberFormat
Klasse.
Hier legen Sie grundsätzlich fest, wie viele Zahlen nach dem Dezimalpunkt erscheinen sollen.
Eine Eingabe von 4.0
würde also ergeben 4.00
, vorausgesetzt, Ihre angegebene Menge war 2.
Wenn Ihre Double
Eingabe jedoch mehr als den angegebenen Betrag enthält, wird der angegebene Mindestbetrag verwendet, und es wird eine weitere auf- / abgerundete Ziffer hinzugefügt
Zum Beispiel wird 4.15465454
mit einer angegebenen Mindestmenge von 2 produziert4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Es gibt viele Möglichkeiten, dies zu tun. Diese sind unten angegeben:
Angenommen, Ihre ursprüngliche Nummer ist unten angegeben:
double number = 2354548.235;
Verwenden von NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Verwenden von String.format:
System.out.println(String.format("%,.2f", number));
Verwenden von DecimalFormat und Muster:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Verwenden von DecimalFormat und Muster
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
In allen Fällen lautet die Ausgabe : 2354548.23
Hinweis :
Während des Rundens können Sie RoundingMode
Ihren Formatierer hinzufügen . Hier sind einige Rundungsmodi unten angegeben:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Hier sind die Importe :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Sie können eine der folgenden Methoden verwenden
Wenn Sie verwenden java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
ODER
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
Wenn Sie es in ein einfaches Zeichenfolgenformat konvertieren möchten
System.out.println(String.format("%.2f", 4.0));
Der gesamte obige Code gibt 4,00 aus
Funktioniert zu 100%.
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
Erster Import NumberFormat
. Dann füge folgendes hinzu:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Dies gibt Ihnen zwei Dezimalstellen und ein Dollarzeichen, wenn es sich um Währung handelt.
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
Sie können dies wie folgt tun:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
anstelle von00
Ich weiß, dass dies ein altes Thema ist, aber wenn Sie den Punkt wirklich gerne anstelle des Kommas haben möchten, speichern Sie Ihr Ergebnis einfach als X, 00 in einem String und ändern Sie es dann einfach für einen Zeitraum, damit Sie X.00 erhalten
Am einfachsten ist es, nur Ersetzen zu verwenden.
String var = "X,00";
String newVar = var.replace(",",".");
Die Ausgabe ist die von Ihnen gewünschte X.00 . Um es einfach zu machen, können Sie alles auf einmal erledigen und in einer doppelten Variablen speichern:
Double var = Double.parseDouble(("X,00").replace(",",".");
Ich weiß, dass diese Antwort momentan nicht nützlich ist, aber vielleicht sucht jemand, der dieses Forum überprüft, nach einer schnellen Lösung wie dieser.
String.format()
oderjava.text.Format
.