118 votes

Perte possible de la fraction

Pardonnez-moi si cette question est naïve, mais je suis perdue aujourd'hui.

J'ai un calcul de division simple tel que le suivant :

double returnValue = (myObject.Value / 10);

La valeur est un int dans l'objet.

Je reçois un message qui dit "Perte possible de fraction". Cependant, lorsque je transforme le double en un int, le message disparaît.

Vous savez pourquoi cela se produit ?

164voto

Ólafur Waage Points 40104

Lorsque vous divisez deux int en une valeur à virgule flottante, la partie fractionnée est perdue. Si vous transformez l'un des éléments en un flottant, vous n'obtiendrez pas cette erreur.

Par exemple, transformez 10 en 10.0.

double returnValue = (myObject.Value / 10.0);

57voto

lc. Points 50297

Vous faites une division entière si myObject.Value est un int, puisque les deux côtés du / sont de type entier.

Pour effectuer une division en virgule flottante, l'un des nombres de l'expression doit être de type virgule flottante. Ce serait le cas si myObject.Value était un double, ou l'un des suivants :

double returnValue = myObject.Value / 10.0;
double returnValue = myObject.Value / 10d; //"d" is the double suffix
double returnValue = (double)myObject.Value / 10;
double returnValue = myObject.Value / (double)10;

7voto

Cambium Points 4070

Un nombre entier divisé par un nombre entier vous donnera un nombre entier. Transformez la valeur en un double ou divisez par 10.0.

7voto

paxdiablo Points 341644

En supposant que myObject.Value est un int l'équation myObject.Value / 10 sera une division entière qui sera ensuite transformée en un double.

Cela signifie que si myObject.Value vaut 12, returnValue vaut 1, no 1.2.

Vous devez d'abord couler la ou les valeurs :

double returnValue = (double)(myObject.Value) / 10.0;

Cela donnerait la valeur correcte 1.2, au moins aussi correcte que les doubles le permettent étant donné leurs limites, mais cela est discuté ailleurs sur SO, presque sans fin :-).

4voto

segfault Points 2315

Je pense que puisque myObject est un int, vous devriez

double returnValue=(myObject.Value/10.0);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X