2017-03-18 8 views
1

In Java, mit NumberFormat.getCurrencyInstance(), kann ich eine formatierte Zeichenfolge erhalten, die einen Preis darstellt. z.B.Java: Get verschiedene Teile von NumberFormat.getCurrencyInstance() Ergebnis

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.GERMANY); 
System.out.println(nf.format(20.10)); // "20,10 €" 

Gibt es eine einfache Möglichkeit, den anderen Teil dieser formatierten Zeichenfolge zu erhalten? d. h. so etwas wie

integerPart -> 20 
decimalPart -> 10 
currencySymbol -> € 
decimalSeparator -> , 

Danke!

+0

Warum Sie das, was Sie brauchen, zu tun? – freedev

Antwort

2

Sie fragen wirklich für zwei verschiedene Dinge:

  1. integerPart und decimalPart gehören zu den Eingang Wert. Sie können mit einigen einfachen Mathematik berechnet werden:

    double input = 20.10; 
    int integerPart = (int)input; // 20 
    int decimalPart = (int)((input - integerPart) * 100); // 10 
    
  2. currencySymbol und decimalSeparator beziehen sich auf die Ausgabe Wert. Sie können mit dem DecimalFormatSymbols Klasse abgerufen werden:

    DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.GERMANY); 
    String currencySymbol = symbols.getCurrencySymbol(); // € 
    char decimalSeparator = symbols.getDecimalSeparator(); // , 
    
+0

Danke! Aber stimme nicht ganz mit 1 überein. Wenn die Eingabe 20,0163 ist, wäre die gewünschte Dezimalzahl "02". Ich weiß, dass ich es immer noch durch eine Verarbeitung bekommen kann, aber da das NumberFormat den Job bereits erledigt hat, möchte ich das Ergebnis wenn möglich auswählen. – lznt

+0

@lznt Verwenden Sie einfach '(int) Math.round ((input - integerPart) * 100)' oder eine andere Rundungsmethode. – shmosel

+0

* da das NumberFormat die Aufgabe bereits erledigt hat, möchte ich, wenn möglich, nur das Ergebnis auswählen. * Das Ergebnis ist nur eine Zeichenkette. Sicher, Sie könnten es wahrscheinlich mit Regex zerhacken, wenn Sie wirklich wollen. Aber das scheint ein umgekehrter Weg zu sein. – shmosel

Verwandte Themen