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 la précision est de 4 chiffres dans la base de données, 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.
Existe-t-il une meilleure approche, par exemple quelque chose comme ci-dessous :
Double value = 10.0;
value.setPrecision(4);
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
ou DecimalFormat
, en fonction de ce que vous voulez faire avec la valeur plus tard.
Voir aussi ma réponse à [cette question] (https://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-in-java/12684082#12684082) pour une réfutation des inévitables réponses *100/100.
La précision de double
et float
est fixée par leur taille et la façon dont les [types de virgule flottante IEEE][1] sont implémentés.
Le nombre de chiffres décimaux dans la sortie, par contre, est une question de formatage. Vous avez raison de dire que taper la même constante à plusieurs reprises est une mauvaise idée. Vous devriez plutôt déclarer une constante de type chaîne de caractères et utiliser sa représentation symbolique.
private static final String DBL_FMT = "##.####";
L'utilisation d'une représentation symbolique vous permettra de modifier la précision à tous les endroits où la constante est utilisée sans avoir à chercher dans votre code.
Pour développer @EJP, le concept de "précision" lorsqu'il s'agit de doubles est extrêmement délicat. Comme indiqué sur https://stackoverflow.com/a/3730040/390153, vous ne pouvez même pas représenter 0,1 comme un double, quelle que soit la précision, pour la même raison que vous ne pouvez pas représenter 1/3 en base 10 avec une précision finie.
Vous devez prendre en compte le problème que vous essayez de résoudre, et y réfléchir :
a) Dois-je utiliser des doubles en premier lieu ? Si la précision est un concept pertinent, alors l'utilisation de doubles peut être une erreur.
b) Si les doubles sont appropriés, qu'est-ce que j'entends par précision ? Si vous ne parlez que de l'affichage, intégrez la logique dans une fonction d'affichage et vous n'aurez à vous en occuper qu'à un seul endroit ; autrement dit, appliquez le principe DRY.