2010-09-08 7 views

Antwort

202

Sie könnten sich die Klasse DecimalFormat ansehen; Es unterstützt verschiedene Gebietsschemata (zB: in einigen Ländern würde das stattdessen als 1.000.500.000,57 formatiert werden).

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)); 
+0

können Sie ein Beispiel zeigen, wie ich NumberFormat in diesem speziellen Fall verwenden kann? –

+1

die wahrscheinlich ein Hinweis auf die nicht-offensichtliche Lösung für das Problem ist ... – LeviX

+1

Sie können auch unten Lösung verwenden - public static String getRoundOffValue (double value) { \t \t \t \t DecimalFormat df = new DecimalFormat (“ ##, ##, ##, ##, ##, ##, ## 0.00 "); \t \t Rückgabe df.format (Wert); } –

29

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

Sie müssen auch diese Zeichenfolge in eine Zahl konvertieren, kann dies mit durchgeführt werden kann

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

oder

verwenden
// format the number for a particular locale 
NumberFormat.getInstance(locale).format(num) 
+0

Wie sowohl locale * als auch * um zB 2 Dezimalstellen angeben? – Jonik

+5

Ah, egal, gefunden: 'new DecimalFormat (" 0. ## ", DecimalFormatSymbols.getInstance (locale))' – Jonik

10

Ich habe mein eigenes Formatierungsprogramm erstellt. Das ist extrem schnell bei der Formatierung können Sie viele Funktionen entlang der Verarbeitung mit geben :)

Es unterstützt:

  • Comma Formatierung Z. B. 1234567 wird 1.234.567.
  • Präfixierung mit "Tausend (K), Million (M), Milliarden (B), Trillion (T)".
  • Präzision von 0 bis 15.
  • Präzisions-Größenanpassung (bedeutet, wenn Sie 6-stellige Genauigkeit wünschen, aber nur 3 verfügbare Ziffern haben, erzwingt es 3).
  • Präfix-Absenkung (bedeutet, wenn das Präfix, das Sie wählen, zu groß ist, wird es auf ein geeigneteres Präfix gesenkt).

Der Code kann here gefunden werden. Sie nennen es wie folgt aus:

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

ich auch dies nicht behandelt dezimal Unterstützung hinweisen sollte, ist aber für ganzzahlige Werte sehr nützlich. Das obige Beispiel würde "1,23M" als Ausgabe anzeigen. Ich könnte vielleicht decimal Unterstützung vielleicht hinzufügen, aber sah nicht zu viel Gebrauch dafür seit dann könnte ich ebenso gut diesen in einen BigInteger Art der Klasse zusammenbringen, die komprimierte char [] Felder für Mathe Berechnungen behandelt.

+2

Das ist gut, wenn Sie nur in englischer Sprache arbeiten. Mein Vorschlag ist, so etwas zu vermeiden, wie es Abendessen meiner nicht englischen Benutzer gepisst hat, weil sie nicht verstehen konnten, was "K" oder "M" – rishabhmhjn

+0

@rishabhmhjn bedeutet, aber ... könnten Sie es nur ändern, um jeden möglichen Brief zu modifizieren brauchen? ist dein Pech seine Schuld? : o und was er erstellt hat, ist ziemlich cool, obwohl der Link gerade nicht verfügbar scheint. –

+0

@AquariusPower das Problem ist, zB. Japanische Zahlen folgen nicht dem metrischen System. Ihre Zahlen sind wie 1 百 für 100, 1 千 für 1000, 1 万 für 10000, dann wird es 1 千万 für 1000,0000. Mein Team hat an etwas ähnlichem in Javascript gearbeitet. Sie können die Logik in diesem einen: https://github.com/statusbrew/angular-bignumber – rishabhmhjn

2

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

daher das Format #, ist ## 0.00 gut für mich arbeiten. Testen Sie immer unterschiedliche Nummern wie 0/100/2334.30 und negative Zahlen, bevor Sie sie auf dem Produktionssystem bereitstellen.

4

Sie können auch eine Lösung verwenden können -

public static String getRoundOffValue(double value){ 

     DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00"); 
     return df.format(value); 
} 
6
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); 
} 
-2

Diese Klasse ist für die einfachen indischen Preis Formatierer

public class Test { 

public static void main (String a[]){ 
    System.out.println(priceFormatter("10023"));  
} 
/** 
* This method is to convert the price into Indian price 
* separator format 
* @param inputPrice 
* @return 
*/ 
public static String priceFormatter(String inputPrice){ 
    try { 
     if(!isNumeric(inputPrice)){ 
      return inputPrice; 
     } 
     // to check if the number is a decimal number 
     String newPrice = "",afterDecimal = ""; 
     if(inputPrice.indexOf('.') != -1){ 
      newPrice = inputPrice.substring(0,inputPrice.lastIndexOf('.')); 
      afterDecimal = inputPrice.substring(inputPrice.lastIndexOf('.')); 
     }else{ 
      newPrice = inputPrice; 
     } 
     int length = newPrice.length(); 
     if (length < 4) { 
      return inputPrice; 
     } 
     // to check whether the length of the number is even or odd 
     boolean isEven = false; 
     if (length % 2 == 0) { 
      isEven = true; 
     } 
     // to calculate the comma index 
     char ch[] = new char[length + (length/2 - 1)]; 
     if (isEven) { 
      for (int i = 0, j = 0; i < length; i++) { 
       ch[j++] = inputPrice.charAt(i); 
       if (i % 2 == 0 && i < (length - 3)) { 
        ch[j++] = ','; 
       } 
      } 
     } else { 
      for (int i = 0, j = 0; i < length; i++) { 
       ch[j++] = inputPrice.charAt(i); 
       if (i % 2 == 1 && i < (length - 3)) { 
        ch[j++] = ','; 
       } 
      } 
     } 
     // conditional return based on decimal number check 
     return afterDecimal.length() > 0 ? String.valueOf(ch) + afterDecimal : String.valueOf(ch); 

    } catch(NumberFormatException ex){ 
     ex.printStackTrace(); 
     return inputPrice; 
    } 
     catch (Exception e) { 
     e.printStackTrace(); 
     return inputPrice; 
    } 
} 

} 
3

Sie tun können, die gesamte Umwandlung in einer Zeile, mit dem folgenden Code:

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

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

19

Dies kann auch mit String.format() erreicht werden, was einfacher und/oder flexibler ist, 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 Format-String „% ,. 2f“ - „“ bedeutet getrennte Zahlengruppen mit Komma und“0,2" bedeutet Runde auf zwei Stellen nach dem Komma.

für Verweis auf andere Formatierungsoptionen finden https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

+1

die schönste Lösung imo, funktioniert genau wie erwartet –

+1

funktioniert wie ein Charme –

2

Hier ist der einfachste Weg ist, um dorthin zu gelangen:

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

Ausgang: 10,987,655.88

+0

dies funktioniert nicht in android –

Verwandte Themen