Le stockage d'un double avec 2 chiffres significatifs
Comment puis-je convertir un double pour avoir une précision de 2 places?
Ex:
double x = 1.00d;
Console.WriteLine(Math.Round(x,2,MidpointRounding.AwayFromZero));
//Should output 1.00 for me, but it outputs just 1.
Ce que je cherche est de stocker de 1.00 dans une variable de type double qui lors de l'impression à la console imprime 1.00.
Grâce,
-Mike
- Avez-vous vu ce sujet? stackoverflow.com/questions/4997085/...
Vous devez vous connecter pour publier un commentaire.
"x" stocke le nombre, il ne fait pas attention à la précision.
Pour la sortie du numéro de comme une chaîne de caractères avec une quantité spécifique de précision, utilisez un spécificateur de format, c'est à dire:
double
est une norme IEEE-754 double précision nombre à virgule flottante. Il a toujours exactement 53 bits de précision. Il n'a pas une précision qui peut être représentée exactement en "décimales" - comme l'expression l'indique, les "décimales" seules des mesures de précision par rapport à la base-10 système de nombre.Si ce que vous voulez, c'est tout simplement de changer la précision de la valeur est affiche avec, alors vous pouvez utiliser l'un des
ToString()
surcharges pour le faire, comme d'autres réponses ici point de sortir.Rappelez-vous aussi que
double
est une approximation du continue valeur réelle, la valeur là où il n'y a pas de tacite discret de quantification (bien que les valeurs sont en fait quantifiée sur 53 bits). Si ce que vous essayez de représenter est un discret de la valeur là où il y a un implicite de quantification (par exemple, si vous travaillez avec des valeurs monétaires, où il y a une différence significative entre 0,1 et 0.099999999999999), alors vous devriez probablement utiliser un type de données qui est basé sur l'entier de la sémantique -- soit un point fixe de la représentation à l'aide d'une échelle de type entier ou quelque chose comme .NETdecimal
type.double
a une précision d'environ 15.9 décimales.) Si vous avez une meilleure idée de la façon d'exprimer que, je serais heureux de les ajuster ma réponse.Ce n'est pas une question de stockage, c'est une question de mise en forme.
Ce code produit
1.00
:0.00
spécificateur de format rond de la valeur?Math.Round
là que pour garder la réponse en tant que proche de l'OP code du possible; d'autres, c'est qu'elle est totalement inutile.La
decimal
type de données a une notion de précision variable. Le type de données double ne fonctionne pas. Sa précision est toujours 53 bits.La chaîne par défaut de la représentation d'un double arrondit légèrement afin de minimiser bizarre valeurs comme
0.999999999999
, puis supprime les zéros de fin. Comme d'autres réponses remarque, vous pouvez modifier ce comportement en utilisant l'un des types deToString
surcharges.