web-dev-qa-db-fra.com

Java: double: comment TOUJOURS afficher deux chiffres décimaux

J'utilise des valeurs doubles dans mon projet et j'aimerais toujours afficher les deux premiers chiffres décimaux, même s'il s'agit de zéros. J'utilise cette fonction pour arrondir et si la valeur que j'imprime est 3.47233322, elle imprime (correctement) 3.47. Mais lorsque j'imprime, par exemple, la valeur 2, elle imprime 2.0.

public static double round(double d) {
    BigDecimal bd = new BigDecimal(d);
    bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
    return bd.doubleValue();
}

Je veux imprimer 2.00! 

Y a-t-il un moyen de faire cela sans utiliser Strings? 

Merci!

EDIT: d'après vos réponses (dont je vous remercie), je comprends que je n'ai pas clairement expliqué ce que je cherchais (et j'en suis désolé): je sais comment imprimer deux chiffres après le nombre à l'aide des solutions que vous avez proposé ... ce que je veux est de stocker dans la double valeur directement les deux chiffres! Ainsi, lorsque je fais quelque chose comme ceci System.out.println("" + d) (où d est mon double avec la valeur 2), il affiche 2,00. 

Je commence à penser qu'il n'y a pas moyen de faire ça ... n'est-ce pas? Merci encore quand même pour vos réponses, s'il vous plaît laissez-moi savoir si vous connaissez une solution!

24
aveschini

Vous pouvez utiliser quelque chose comme ceci:

 double d = 1.234567;
 DecimalFormat df = new DecimalFormat("#.00");
 System.out.print(df.format(d));

Édité pour effectivement répondre à la question parce que j'avais besoin de la vraie réponse et que cela apparaissait sur google et que quelqu'un l'indiquait comme étant la réponse malgré le fait que cela ne fonctionnerait pas lorsque les décimales étaient nulles.

49
Peter Jaloveczki

Utilisez le Java.text.NumberFormat pour ceci:

NumberFormat nf= NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
nf.setRoundingMode(RoundingMode.HALF_UP);

System.out.print(nf.format(decimalNumber));
18
darijan

Vous pouvez simplement faire ceci:

double d = yourDoubleValue;  
String formattedData = String.format("%.02f", d);
7
Miral Sarwar

DecimalFormat est l'option la plus simple à utiliser:

double roundTwoDecimals(double d) {
        DecimalFormat twoDecimals = new DecimalFormat("#.##");
        return Double.valueOf(twoDecimals.format(d));
}

J'espère que cela résoudra votre problème ...

3
Mathias G.

Vous pouvez utiliser quelque chose comme ça :

Si vous souhaitez conserver 0 également dans la réponse: , Utilisez (0.00) au format String

double d = 2.46327;
DecimalFormat df = new DecimalFormat("0.00");
System.out.print(df.format(d));

La sortie: 2.46

double d = 0.0001;
DecimalFormat df = new DecimalFormat("0.00");
System.out.print(df.format(d));

La sortie: 0.00

Cependant, si vous utilisez DecimalFormat, df = new DecimalFormat ("0. ##");

double d = 2.46327;
DecimalFormat df = new DecimalFormat("0.##");
System.out.print(df.format(d));

La sortie: 2.46

double d = 0.0001;
DecimalFormat df = new DecimalFormat("0.##");
System.out.print(df.format(d));

La sortie: 0

0
Sagar Vora
Java.text.DecimalFormat df = new Java.text.DecimalFormat("###,###.##");
df.setMaximumFractionDigits(2); 
df.setMinimumFractionDigits(2); 
0
Vikash Kumar