wake-up-neo.com

Wie kann ich eine String-Nummer so formatieren, dass sie Kommas und Runden enthält?

Wie formatiere ich die folgende Nummer, die mir als String gegeben wurde, am besten?

String number = "1000500000.574" //assume my value will always be a String

Ich möchte, dass dies ein String mit folgendem Wert ist: 1,000,500,000.57

Wie kann ich es als solches formatieren?

125
Sheehan Alam

Vielleicht möchten Sie sich die Klasse DecimalFormat ansehen. Es unterstützt verschiedene Gebietsschemas (zB: In einigen Ländern wird das Format als 1.000.500.000,57 stattdessen).

Sie müssen diese Zeichenfolge auch in eine Zahl konvertieren. Dies kann folgendermaßen erfolgen:

double amount = Double.parseDouble(number);

Codebeispiel:

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");

System.out.println(formatter.format(amount));
236

Dies kann auch mit String.format () erreicht werden. Dies ist möglicherweise einfacher und/oder flexibler, wenn Sie mehrere Zahlen in einer Zeichenfolge formatieren.

    String number = "1000500000.574";
    Double numParsed = Double.parseDouble(number);

    System.out.println(String.format("The input number is: %,.2f", numParsed));
    // Or
    String numString = String.format("%,.2f", numParsed);

Für die Formatzeichenfolge "%, 2f" - "," bedeutet separate Zifferngruppen mit Kommas, und ".2" bedeutet auf zwei Nachkommastellen runden.

Informationen zu anderen Formatierungsoptionen finden Sie unter https://docs.Oracle.com/javase/tutorial/Java/data/numberformat.html

37
Greg H

Sobald Sie Ihren String in eine Zahl umgewandelt haben, können Sie verwenden

// format the number for the default locale
NumberFormat.getInstance().format(num)

oder

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
36
Aaron Novstrup

Ich habe mein eigenes Formatierungsprogramm erstellt. Welches ist extrem schnell bei der Verarbeitung der Formatierung und bietet Ihnen viele Funktionen :)

Es unterstützt:

  • Komma-Formatierung z.B. 1234567 wird zu 1.234.567.
  • Präfix mit "Tausend (K), Million (M), Milliarde (B), Billion (T)".
  • Genauigkeit von 0 bis 15.
  • Größenanpassung (Wenn Sie eine Genauigkeit von 6 Stellen wünschen, aber nur 3 Stellen zur Verfügung haben, wird die Genauigkeit auf 3 erhöht.).
  • Präfixverkleinerung (Bedeutet, wenn das von Ihnen gewählte Präfix zu groß ist, wird es auf ein geeigneteres Präfix verkleinert).

Den Code finden Sie hier . Du nennst es so:

public static void main(String[])
{
   int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
   String formatted = ValueFormat.format(1234567, settings);
}

Ich sollte auch darauf hinweisen, dass dies keine Dezimalunterstützung behandelt, aber für ganzzahlige Werte sehr nützlich ist. Das obige Beispiel würde "1.23M" als Ausgabe anzeigen. Möglicherweise könnte ich Dezimalunterstützung hinzufügen, aber seitdem konnte ich dies genauso gut zu einer Klasse vom Typ BigInteger zusammenfassen, die komprimierte char [] -Arrays für mathematische Berechnungen verarbeitet.

11
Jeremy Trifilo

Angesichts dessen ist dies das erste Google-Ergebnis für format number commas Java, hier ist eine Antwort, die für Leute funktioniert, die mit ganzen Zahlen arbeiten und sich nicht um Dezimalstellen kümmern.

String.format("%,d", 2000000)

ausgänge:

2,000,000
8
Ben Watson
public void convert(int s)
{
    System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}

public static void main(String args[])
{
    LocalEx n=new LocalEx();
    n.convert(10000);
}
6
user3314142

sie können auch die folgende Lösung verwenden -

public static String getRoundOffValue(double value){

        DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
        return df.format(value);
}
5
Jitendra Nath

Hier ist der einfachste Weg dorthin:

String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result)); 

ausgabe: 10.987.655,88

3
John Paker

Mit dem folgenden Code können Sie die gesamte Konvertierung in einer Zeile durchführen:

String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));

Die letzten beiden # -Zeichen im DecimalFormat-Konstruktor können auch 0 sein. So oder so funktioniert.

3
Peter Griffin

Die erste Antwort funktioniert sehr gut, aber für ZERO/0 wird sie als .00 formatiert

Daher funktioniert das Format #, ## 0.00 gut für mich. Testen Sie immer verschiedene Zahlen wie 0/100/2334.30 und negative Zahlen, bevor Sie sie auf dem Produktionssystem bereitstellen.

2