32 Stimmen

Wie verwendet man Java's DecimalFormat für "intelligente" Währungsformatierung?

Ich würde gerne Javas DecimalFormat verwenden, um Doubles wie folgt zu formatieren:

#1 - 100 -> $100
#2 - 100.5 -> $100.50
#3 - 100.41 -> $100.41

Das Beste, was mir bis jetzt einfällt, ist:

new DecimalFormat("'$'0.##");

Dies funktioniert jedoch nicht für Fall 2 und gibt stattdessen "$100.5" aus.

Edita:

Viele dieser Antworten berücksichtigen nur die Fälle 2 und 3 und erkennen nicht, dass ihre Lösung dazu führt, dass in 1 die Zahl 100 als "$100.00" und nicht als "$100" formatiert wird.

23voto

Bradley Swain Punkte 804

Muss es die DecimalFormat ?

Falls nicht, sollte folgendes funktionieren:

String currencyString = NumberFormat.getCurrencyInstance().format(currencyNumber);
//Handle the weird exception of formatting whole dollar amounts with no decimal
currencyString = currencyString.replaceAll("\\.00", "");

9voto

Alexandra Dumas Punkte 146

Verwenden Sie NumberFormat:

NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US); 
double doublePayment = 100.13;
String s = n.format(doublePayment);
System.out.println(s);

Verwenden Sie außerdem keine Doppelwerte, um exakte Werte darzustellen. Wenn Sie Währungswerte in etwas wie einer Monte-Carlo-Methode verwenden (wo die Werte ohnehin nicht exakt sind), ist double vorzuziehen.

Siehe auch: Java-Programme zur Berechnung und Formatierung von Währungen schreiben

7voto

Bala R Punkte 104615

Versuchen Sie

new DecimalFormat("'$'0.00");

Edita:

Ich habe es versucht

DecimalFormat d = new DecimalFormat("'$'0.00");

        System.out.println(d.format(100));
        System.out.println(d.format(100.5));
        System.out.println(d.format(100.41));

und bekam

$100.00
$100.50
$100.41

3voto

Rafael T Punkte 15034

Versuchen Sie es mit

DecimalFormat.setMinimumFractionDigits(2);
DecimalFormat.setMaximumFractionDigits(2);

1voto

ashakirov Punkte 11503

Sie können prüfen, ob die Zahl ganz oder nicht ganz ist, und das gewünschte Zahlenformat auswählen.

public class test {

  public static void main(String[] args){
    System.out.println(function(100d));
    System.out.println(function(100.5d));
    System.out.println(function(100.42d));
  }

  public static String function(Double doubleValue){
    boolean isWholeNumber=(doubleValue == Math.round(doubleValue));
    DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols(Locale.GERMAN);
    formatSymbols.setDecimalSeparator('.');

    String pattern= isWholeNumber ? "#.##" : "#.00";    
    DecimalFormat df = new DecimalFormat(pattern, formatSymbols);
    return df.format(doubleValue);
  }
}

wird genau das geben, was Sie wollen:

100
100.50
100.42

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X