double variable = Convert.ToDouble(5/100); Will return 0.0 but i expected 0.05What can / must i change to get 0.05because the 5 in this example is a variable
7 Réponses :
si ou EM> P> 5/100 code> est effectué en integer arithmétique, qui donne 0 avant la conversion em>. Essayez
5 code> est dans une variable
x code> (de type entier), puis utilisez: p>
variable = x/100.0;
Je décide mon bowvote parce que vous avez ajouté un exemple correct, mais vous avez toujours de mauvais exemples en utilisant convert.todouble code> sur une expression qui est déjà i> un double. Pourquoi?
@Ben: Merci, corrigé (j'étais pressé, désolé)
@Luther: Je suggère de passer de "double) x / 100" à "((double) x) / 100" pour rendre l'intention plus claire. Ne change pas la fonctionnalité, cependant.
Je me demandais également pourquoi on utiliserait une convertie plutôt que de jeter en premier lieu. Gestion des exceptions?
Je pense que la question demande pourquoi elle est traitée de cette façon.
marco,
essayez cela à la place: p> JIM P> aussi, comme nous ne savons pas si La variable proviendra d'une chaîne ou d'un nombre, il devrait également envisager une trypairse, etc. sur le numéro 1er avant de faire l'arithmétique. P> P>
Utilisation inutile de converti code> et non évidente (le casting a-t-il préséance sur la division ou la division est-elle faite en premier?)
Ben - merci pour le bowvote :-). Je m'adresse à sa question avec une réponse qui correspond à ses exigences prévues. Ni plus ni moins..
Tous les 1111 - Jambes onze: 0
Parce que 5/100 en Integer Division est 0. Vous devez vous assurer de faire une division sur les doubles. P>
double variable = 5d / 100d; p>
5/100 est entier arithmétique. Afin d'avoir une double précision une ou plusieurs des valeurs doivent être doubles.
double numerator = 5; double denominator = 100; double result = numerator / denominator;
Contrairement au monde réel, les ordinateurs traitent Opérations mathématiques un peu différemment bien qu'il n'y ait pas différence significative une fois que nous comprendre pourquoi il se comporte ainsi. P> blockQuote>
1.) Pourquoi cela se comporte comme ça? strong> p> Notez que, les entiers sont des nombres entiers et les variables de type
entier ne peuvent stocker que des nombres entiers forts> et ne peuvent pas stocker ni reconnaître des nombres décimaux. Lorsque vous dites 5/100, 5 et 100 sont des littéraux entier pour les ordinateurs et s'appelle Division entier forte>. Le résultat devrait être de 0,05 mais , car il s'agit d'une division entière, le résultat serait également entier fort> et, comme je l'ai dit entiers ne peut pas stocker des valeurs de points décimales, la partie la partie arrière après "". (point décimal) est complètement ignoré et donc le résultat est de 0 fort>. P> en ajoutant plus à cela, bien que vous convertissez le résultat en double, il ne fait aucune différence car
avant qu'il ne soit réellement converti en un double résultat est déjà 0 et il arrive à convertir entier 0 en double. qui entraîne finalement 0,0 fort>. p>
2.) Comment obtenir la sortie souhaitée? strong> p> Autres réponses Expliquez très bien la solution, je vous demande donc de vous référer à ces réponses plutôt de réinventer la roue pour vous. P>
J'espère que cela aide. P>
Voici donc ma réponse révisée "considérée comme" ...
Comme nous ne savons pas ce que "type" de variable arrive en tant que numérateur, nous devrions utiliser la double.Tryparse à ce sujet. Dans le laboratoire, nous pourrions cuisiner quelque chose comme ça: p> se cachant maintenant sous le bureau - juste au cas où je suis négligé quelque chose d'autre évident !! :) p> JIM P> P>
Pouvons-nous voir une plus grande partie de votre code, pour moi cela fonctionne.