Le formatage d'un double à deux décimales
J'ai essayé de faire la réponse ce imprime d'être à deux décimales. Toutes les mathématiques impliquées, afin de conserver le format de deux décimales. J'ai essayé quelques petites choses et je ne suis pas sûr de ce changement pour faire ce travail.
double pdt1 = 239.99;
double pdt1Total;
double pdt2 = 129.75;
double pdt2Total;
double pdt3 = 99.95;
double pdt3Total;
double pdt4 = 350.89;
double pdt4Total;
double wage = 200;
double percentage = 9;
double total;
double answer;
double i = 100;
double a;
double b;
double c;
double d;
Console.Write("Enter number sold of product #1: ");
a = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter number sold of product #2: ");
b = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter number sold of product #3: ");
c = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter number sold of product #4: ");
d = Convert.ToInt32(Console.ReadLine());
pdt1Total = a * pdt1;
pdt2Total = b * pdt2;
pdt3Total = c * pdt3;
pdt4Total = d * pdt4;
total = (pdt1Total + pdt2Total + pdt3Total + pdt4Total);
string.Format("{0:0.00}", total);
string.Format("{0:0.00}", answer = (total * percentage / i) + wage);
Console.WriteLine("Earnings this week: "+answer+"");
- Ce n'est pas de travail?
- Vous ne voulez probablement pas à l'aide de la virgule flottante pour la monnaie - les erreurs d'arrondi morsure finalement. Il ne semble pas être quelque chose de construit dans, mais voir les liens codeproject.com/Articles/28244/A-Money-type-for-the-CLR pour l'inspiration. Ayant dit que, quand vous commencez à faire des choses comme les calculs de pourcentage, on ne peut pas vraiment éviter d'ajouter un peu plus de décimales...
- J'ai besoin de la double à toujours rester à deux décimales, mais la réponse ne sera pas tenir compte de cela. donc un format de: 209.00 (si vous avez choisi 1 produit pour le produit de trois à zéro pour tous les autres, ce devrait être la réponse.)
- Et la réponse qu'obtenez-vous?
- J'ai été faire 108.9955, mais maintenant, avec Damith du code, il fonctionne.
- Double Possible de à l'Aide de la Chaîne de Format pour montrer décimal jusqu'à 2 endroits ou simple entier
Vous devez vous connecter pour publier un commentaire.
string.Format
ne changera pas la valeur d'origine, mais elle retourne une chaîne formatée. Par exemple:Remarque:
Console.WriteLine
permet inline mise en forme de chaîne. Le ci-dessus est équivalente à:Bien, en fonction de vos besoins vous pouvez choisir une des méthodes suivantes. Hors mis est écrit à l'encontre de chaque méthode
Vous pouvez choisir celui dont vous avez besoin
Cette volonté autour de
Cela permettra d'assurer que 2 décimales sont écrits.
si vous voulez écrire des virgules, vous pouvez utiliser cette
si vous voulez retourner à l'arrondi de la valeur décimale vous pouvez le faire
Vous pouvez compléter un
double
à deux décimales après la virgule, comme ceci:Mais méfiez-vous de l'arrondissement sera finalement vous mordre, afin de l'utiliser avec prudence.
Au lieu d'utiliser l'
decimal
type de données.Je recommande Fixe le Point ("F") spécificateur de format (comme mentionné par Ehsan). Voir la Chaînes De Format Numérique Standard.
Avec cette option, vous pouvez même avoir un nombre configurable de décimales:
Puisque vous travaillez dans la monnaie, pourquoi ne pas simplement faire ceci:
Ce sera le format de réponse en tant que monnaie, de sorte que sur ma machine (royaume-UNI), il va sortir comme:
Bénéfice de cette semaine: £209.00
Le problème est que lorsque vous faites des additions et des multiplications de nombres avec deux chiffres après la virgule, vous vous attendez, il n'y aura pas d'erreurs d'arrondi, mais n'oubliez pas la représentation interne de la double est en base 2, pas en base 10 ! Ainsi, un nombre, par exemple de 0,1 en base 10 peut être en base 2 : 0.101010101010110011... avec un nombre infini de décimales (la valeur stockée dans le double sera un nombre N avec :
Comme une conséquence d'une opération comme 12.3 + 0.1 peut-être pas exactement la même 64 bits double valeur de 12,4 (ou 12.456 * 10 peut être pas le même que 124.56) en raison des erreurs d'arrondi.
Par exemple, si vous stockez dans une Base de données le résultat de 12,3 +0.1 dans une table/colonne champ de type double precision numéro et SÉLECTIONNEZ l'endroit OÙ xx=12.4, vous pouvez réaliser que vous avez stocké un nombre qui n'est pas exactement 12.4 et le Sql select ne sera pas de retour l'enregistrement;
Donc, si vous ne pouvez pas utiliser le type de données décimal (qui est interne à la représentation en base 10) et doivent utiliser le "double" de type de données, vous devez faire quelques normalisation après chaque addition ou de multiplication :