kzen.dev
  • Questions
  • Tags
  • Utilisateurs
Notifications
Récompenses
Inscription
Une fois inscrit, vous serez informé des réponses et des commentaires à vos questions.
Connectez-vous
Si vous avez déjà un compte, connectez-vous pour vérifier les nouvelles notifications.
Il y aura des récompenses pour les questions, réponses et commentaires ajoutés.
Détails
Source
Editer
 Kiran
Kiran
Question

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 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);
86 2013-02-13T03:30:01+00:00 3
 Raptor
Raptor
Question modifiée 13 février 2013 в 3:31
Programmation
java
Cette question a 1 réponse en anglais, pour les lire connectez-vous à votre compte.
Solution / Réponse
 user207421
user207421
13 février 2013 в 3:32
2013-02-13T03:32:24+00:00
Détails
Source
Editer
#18493676

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.

 Community
Community
Réponse modifiée 23 mai 2017 в 12:02
51
0
 dasblinkenlight
dasblinkenlight
13 février 2013 в 3:37
2013-02-13T03:37:22+00:00
Détails
Source
Editer
#18493677

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.

[1] : http://en.wikipedia.org/wiki/IEEE_floating_point

 user207421
user207421
Réponse modifiée 30 septembre 2013 в 6:36
3
0
 Recurse
Recurse
13 février 2013 в 3:40
2013-02-13T03:40:34+00:00
Détails
Source
Editer
#18493678

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.

 Community
Community
Réponse modifiée 23 mai 2017 в 12:10
1
0
Communautés apparentées 1
Java 🇫🇷
Java 🇫🇷
2 utilisateurs
Discutons de Java, de ses framework et de son utilisation Retrouvez d'autres groupes de développeurs francophones sur @dev_fr
Ouvrir telegram
Ajouter une question
Catégories
Toutes
Technologie
Culture / Loisirs
Vie / Arts
Science
Professionnel
Entreprises
Utilisateurs
Tous
Nouveau
Populaire
1
Денис Васьков
Enregistré il y a 15 heures
2
Dima Patrushev
Enregistré il y a 2 jours
3
sirojidddin otaboyev
Enregistré il y a 1 semaine
4
Елена Гайдамамакинат
Enregistré il y a 1 semaine
5
Иван Степанюк
Enregistré il y a 1 semaine
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RU
TR
ZH
© kzen.dev 2023
Source
stackoverflow.com
sous licence cc by-sa 3.0 avec l'attribution