133 votes

Java : Comment définir la précision d'une valeur double ?

Je travaillais récemment avec des nombres et j'ai eu une situation où je voulais définir la précision d'une valeur double, disons à 6 chiffres ou à 4 chiffres, selon la valeur stockée dans la base de données.

Par exemple, si dans la base de données la précision est fixée à 4 chiffres, la sortie doit ressembler à ceci,

10.0000 .

J'ai essayé avec DecimalFormat et en utilisant la chaîne ##.#### mais c'est ennuyeux d'utiliser des symboles à chaque fois.

Y a-t-il une meilleure approche, disons quelque chose comme ci-dessous :

Double value = 10.0;
value.setPrecision(4);

346voto

Neel Points 3249

Vous pouvez essayer BigDecimal à cette fin

Double toBeTruncated = new Double("3.5789055");

Double truncatedDouble = BigDecimal.valueOf(toBeTruncated)
    .setScale(3, RoundingMode.HALF_UP)
    .doubleValue();

79voto

EJP Points 113412

Vous ne pouvez pas définir la précision d'un double (ou Double) sur un nombre spécifique de chiffres décimaux, car les valeurs à virgule flottante n'ont pas de chiffres décimaux. Elles ont des chiffres binaires.

Vous devrez convertir en un radix décimal, soit via BigDecimal o DecimalFormat en fonction de ce que vous voulez faire de cette valeur par la suite.

Voir également ma réponse à cette question pour une réfutation des inévitables réponses *100/100.

76voto

C'est un moyen facile de le faire :

String formato = String.format("%.2f");

Il fixe la précision à 2 chiffres.

Si vous voulez seulement imprimer, utilisez-le de cette façon :

System.out.printf("%.2f",123.234);

27voto

Jay Patel Points 960

Pour définir la précision des valeurs doubles DecimalFormat est une bonne technique. Pour utiliser cette classe, importez java.text.DecimalFormat et créer un objet de celui-ci, par exemple

double no=12.786;
DecimalFormat dec = new DecimalFormat("#0.00");
System.out.println(dec.format(no));

Donc il imprimera deux chiffres après le point décimal, ici il imprimera 12.79.

12voto

bretter Points 223

Cela a marché pour moi :

public static void main(String[] s) {
        Double d = Math.PI;
        d = Double.parseDouble(String.format("%.3f", d));  // can be required precision
        System.out.println(d);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X