Comment utiliser Java DecimalFormat pour le formatage "intelligent" des devises?

j'aimerais utiliser le format décimal de Java pour formater des doubles comme ceci:

#1 - 100 -> 0
#2 - 100.5 -> 0.50
#3 - 100.41 -> 0.41

Le mieux que je peux venir avec à ce jour est:

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

mais cela ne fonctionne pas pour le cas #2, et produit plutôt "$ 100.5"

Edit:

beaucoup de ces réponses ne prennent en compte que les cas #2 et #3 et ne se rendent pas compte que leur solution fera en sorte que #1 formate 100 soit "$100.00" au lieu de juste "$100".

28
demandé sur Peter 2011-02-17 22:09:02

9 réponses

il faut utiliser DecimalFormat?

Si non, il ressemble à la suivante devrait fonctionner:

String currencyString = NumberFormat.getCurrencyInstance().format(currencyNumber);
//Handle the weird exception of formatting whole dollar amounts with no decimal
currencyString = currencyString.replaceAll("\.00", "");
22
répondu Bradley Swain 2011-03-14 03:28:24

Utiliser Le Numéro De Formulaire:

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

de plus, n'utilisez pas de doubles pour représenter les valeurs exactes. Si vous utilisez des valeurs de devises dans quelque chose comme une méthode de Monte Carlo (où les valeurs ne sont pas exactes de toute façon), double est préférable.

Voir aussi: écrire des programmes Java pour calculer et formater la monnaie

6
répondu Alexandra Dumas 2011-02-17 19:14:38

new DecimalFormat("'$'0.00");

Edit:

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 a obtenu

0.00
0.50
0.41
5
répondu Bala R 2011-02-17 19:28:38

Essayez d'utiliser

DecimalFormat.setMinimumFractionDigits(2);
DecimalFormat.setMaximumFractionDigits(2);
2
répondu Rafael T 2011-02-17 19:15:55

vous pouvez cocher "est le nombre entier ou pas" et choisir le format de nombre nécessaire.

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
1
répondu ashakirov 2012-11-23 09:08:33

Vous pouvez utiliser le format suivant:

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

1
répondu mizanurahma 2014-05-12 09:06:44

je sais que c'est trop tard. Mais à l'issue d'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.   

Espérons que cette aide celui qui lit ceci dans le futur :)

1
répondu Shailesh Vaishampayan 2017-01-14 17:55:10

Vous pouvez essayer en utilisant deux différents DecimalFormat objets en se basant sur 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:-
0
0.50
0.41
1
répondu Sai Gattu 2017-06-19 14:18:17

printf fonctionne aussi.

Exemple:

double anyNumber = 100; printf ("la valeur est %4.2 f", anyNumber);

Sortie:

la valeur est 100.00

4.2 signifie forcer le nombre à avoir deux chiffres après la décimale. Le 4 contrôle combien de chiffres à la droite de la décimale.

0
répondu Casper 2013-03-08 03:04:19