8
votes

Pourquoi retourne c # convert.todouble (5/100) 0.0 et non 0.05

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 

1 commentaires

Pouvons-nous voir une plus grande partie de votre code, pour moi cela fonctionne.


7 Réponses :


19
votes

5/100 code> est effectué en integer arithmétique, qui donne 0 avant la conversion em>. Essayez xxx pré>

si 5 code> est dans une variable x code> (de type entier), puis utilisez: p> xxx PRE>

ou EM> P>

variable = x/100.0;


5 commentaires

Je décide mon bowvote parce que vous avez ajouté un exemple correct, mais vous avez toujours de mauvais exemples en utilisant convert.todouble sur une expression qui est déjà 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.



-3
votes

marco,

essayez cela à la place: xxx

JIM

[EDIT TARD] - Comme indiqué OUT (par électeurs silencieux :)) L'utilisation de la convertie est redunante. Il devrait évidemment être fait d'une manière similaire aux autres entrées. Je reconnais que, mais laissez-le ci-dessus comme exemple de la façon de devenir rapidement évité lorsque vous répondez à une question à la hâte ... Laissez prudemment être votre maître !!

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.


3 commentaires

Utilisation inutile de converti 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



2
votes

Parce que 5/100 en Integer Division est 0. Vous devez vous assurer de faire une division sur les doubles.


0 commentaires

1
votes

double variable = 5d / 100d;


0 commentaires

2
votes

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;


0 commentaires

4
votes

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.

1.) Pourquoi cela se comporte comme ça?

Notez que, les entiers sont des nombres entiers et les variables de type entier ne peuvent stocker que des nombres entiers 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 . Le résultat devrait être de 0,05 mais , car il s'agit d'une division entière, le résultat serait également entier 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 .

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 .

2.) Comment obtenir la sortie souhaitée?

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.

J'espère que cela aide.


0 commentaires

0
votes

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: xxx

se cachant maintenant sous le bureau - juste au cas où je suis négligé quelque chose d'autre évident !! :)

JIM


0 commentaires