web-dev-qa-db-fra.com

Java - Format double valeur en dollars

Je dois formater le double "amt" comme un montant en dollars println ("$" + dollars + "." + Cents), de sorte qu'il y ait deux chiffres après la virgule.

Quelle est la meilleure façon de s'y prendre?

if (payOrCharge <= 1)
{
    System.out.println("Please enter the payment amount:");
    double amt = keyboard.nextDouble();
    cOne.makePayment(amt);
    System.out.println("-------------------------------");
    System.out.println("The original balance is " + cardBalance + ".");
    System.out.println("You made a payment in the amount of " + amt + ".");
    System.out.println("The new balance is " + (cardBalance - amt) + ".");
}
else if (payOrCharge >= 2)
{
    System.out.println("Please enter the charged amount:");
    double amt = keyboard.nextDouble();
    cOne.addCharge(amt);
    System.out.println("-------------------------------");
    System.out.println("The original balance is $" + cardBalance + ".");
    System.out.println("You added a charge in the amount of " + amt + ".");
    System.out.println("The new balance is " + (cardBalance + amt) + ".");
}
24
ajanic0le

Utilisez NumberFormat.getCurrencyInstance () :

double amt = 123.456;    

NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println(formatter.format(amt));

Sortie:

$123.46
44
arshajii

Vous pouvez utiliser un DecimalFormat

DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(amt));

Cela vous donnera une impression avec toujours 2dp.

Mais vraiment, vous devriez utiliser BigDecimal pour de l'argent, à cause de problèmes de virgule flottante

6
blitzen

Utilisez DecimalFormat pour imprimer une valeur décimale au format souhaité, par exemple.

DecimalFormat dFormat = new DecimalFormat("#.00");
System.out.println("$" + dFormat.format(amt));

Si vous souhaitez afficher $ montant au format de nombre américain, essayez:

DecimalFormat dFormat = new DecimalFormat("####,###,###.00");
System.out.println("$" + dFormat.format(amt));

En utilisant .00, il imprime toujours deux points décimaux, quelle que soit leur présence. Si vous souhaitez imprimer des décimales uniquement lorsqu'elles sont présentes, utilisez .## dans la chaîne de formatage.

5
Yogendra Singh

Vous pouvez utiliser printf pour un liner

System.out.printf("The original balance is $%.2f.%n", cardBalance);

Cela imprimera toujours deux décimales, en arrondissant si nécessaire.

3
Peter Lawrey

Utilisez BigDecimal au lieu de doubler pour les types de devise. Dans le livre Java Puzzlers, nous voyons:

System.out.println(2.00 - 1.10);

et vous pouvez voir que ce ne sera pas 0.9.

String.format () a des modèles pour la mise en forme des nombres.

0
Amir Pashazadeh