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.

1voto

mizanurahma Punkte 139

Sie können das folgende Format verwenden:

DecimalFormat dformat = new DecimalFormat("$#.##");

1voto

Ich weiß, dass es zu spät ist. Aber folgendes hat bei mir funktioniert:

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.UK);
new DecimalFormat("\u00A4#######0.00",otherSymbols).format(totalSale);

 \u00A4 : acts as a placeholder for currency symbol
 #######0.00 : acts as a placeholder pattern for actual number with 2 decimal 
 places precision.   

Ich hoffe, das hilft allen, die dies in Zukunft lesen :)

1voto

Sai Gattu Punkte 11

Sie können es mit zwei verschiedenen DecimalFormat Objekte auf der Grundlage der Bedingung wie folgt:

double d=100;
double d2=100.5;
double d3=100.41;

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

if(d%1==0){ // this is to check a whole number
    DecimalFormat df2=new DecimalFormat("'$'");
    System.out.println(df2.format(d));
}

System.out.println(df.format(d2));
System.out.println(df.format(d3));

Output:-
$100
$100.50
$100.41

1voto

Sebastian Thees Punkte 2625

Dazu können Sie die Java Money API verwenden. (obwohl dies nicht DecialFormat verwendet)

long amountInCents = ...;
double amountInEuro = amountInCents / 100.00;

String customPattern; 
if (minimumOrderValueInCents % 100 == 0) {
    customPattern = "# ¤";
} else {
    customPattern = "#.## ¤";
}

Money minDeliveryAmount = Money.of(amountInEuro, "EUR");
MonetaryAmountFormat formatter = MonetaryFormats.getAmountFormat(AmountFormatQueryBuilder.of(Locale.GERMANY)
            .set(CurrencyStyle.SYMBOL)
            .set("pattern", customPattern)
            .build());

System.out.println(minDeliveryAmount);

-1voto

Casper Punkte 3695

Printf funktioniert auch.

Beispiel:

double anyNumber = 100; printf("Der Wert ist %4.2f ", anyNumber);

Ausgabe:

Der Wert beträgt 100,00

4.2 bedeutet, dass die Zahl zwei Stellen nach dem Komma haben muss. Die 4 legt fest, wie viele Stellen rechts vom Dezimalpunkt stehen.

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