J'aimerais utiliser DecimalFormat de Java pour formater des doubles comme ceci:
#1 - 100 -> $100
#2 - 100.5 -> $100.50
#3 - 100.41 -> $100.41
Le mieux que je puisse trouver jusqu'à présent est:
new DecimalFormat("'$'0.##");
Mais cela ne fonctionne pas pour le cas n ° 2 et génère à la place "100,5 $"
Éditer:
Beaucoup de ces réponses ne prennent en compte que les cas n ° 2 et n ° 3 et ne réalisent pas que leur solution fera que le n ° 1 formatera 100 en "100,00 $" au lieu de "100 $".
Doit-il utiliser DecimalFormat
?
Sinon, il semble que ce qui suit devrait fonctionner:
String currencyString = NumberFormat.getCurrencyInstance().format(currencyNumber);
//Handle the weird exception of formatting whole dollar amounts with no decimal
currencyString = currencyString.replaceAll("\\.00", "");
Utilisez NumberFormat:
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
double doublePayment = 100.13;
String s = n.format(doublePayment);
System.out.println(s);
N'utilisez pas non plus de doubles pour représenter des valeurs exactes. Si vous utilisez des valeurs monétaires dans quelque chose comme une méthode Monte Carlo (où les valeurs ne sont pas exactes de toute façon), le double est préférable.
Voir aussi: Écrire Java programmes pour calculer et formater la devise
Essayer
new DecimalFormat("'$'0.00");
Éditer:
J'ai essayé
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));
et j'ai
$100.00
$100.50
$100.41
Essayez d'utiliser
DecimalFormat.setMinimumFractionDigits(2);
DecimalFormat.setMaximumFractionDigits(2);
Vous pouvez utiliser le format suivant:
DecimalFormat dformat = new DecimalFormat ("$ #. ##");
Vous pouvez cocher "est un nombre entier ou non" et choisir le format de nombre requis.
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);
}
}
donnera exactement ce que vous voulez:
100
100.50
100.42
Je sais que c'est trop tard. Cependant, ce qui suit a fonctionné pour moi:
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.
J'espère que cela aidera quiconque lira ceci à l'avenir :)
Vous pouvez essayer en utilisant deux objets DecimalFormat
différents en fonction de la condition comme suit:
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
Vous pouvez utiliser la Java API Money pour y parvenir. (Bien que cela n'utilise pas DecialFormat)
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);