Perte de fraction possible

Pardonnez-moi si c’est une question naïve, mais je suis désemparé aujourd’hui.

J’ai un calcul de division simple comme suit:

double returnValue = (myObject.Value / 10); 

La valeur est un int dans l’object.

Je reçois un message indiquant une perte de fraction possible. Cependant, lorsque je change le double en int, le message disparaît.

Des pensées sur pourquoi cela se produirait?

Lorsque vous divisez deux int en une valeur à virgule flottante, la fraction est perdue. Si vous lancez l’un des éléments sur un flottant, vous n’obtiendrez pas cette erreur.

Donc, par exemple, transformer 10 en 10.0

 double returnValue = (myObject.Value / 10.0); 

Vous faites une division entière si myObject.Value est un int, car 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 du type à virgule flottante. Ce serait vrai 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; 

En supposant que myObject.Value soit un int , l’équation myObject.Value / 10 sera une division entière qui sera ensuite myObject.Value / 10 double.

Cela signifie que myObject.Value étant égal à 12, returnValue deviendra 1 et non 1.2.

Vous devez d’abord convertir les valeurs:

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

Cela se traduirait par une valeur correcte de 1,2, du moins aussi correcte que les doubles permettent compte tenu de leurs limitations, mais cela est discuté ailleurs sur SO, presque sans fin :-).

Un entier divisé par un entier renverra votre entier. Lancez la valeur en double ou en divisant par 10.0.

Je pense que puisque myObject est un int, vous devriez

 double returnValue=(myObject.Value/10.0);