Возможная потеря фракции

Простите меня, если это наивный вопрос, однако сегодня я в недоумении.

У меня есть простой расчет распределения, например:

double returnValue = (myObject.Value / 10);

Значение - это int в объекте.

Я получаю сообщение с сообщением "Возможная потеря доли". Однако, когда я изменяю double на int, сообщение исчезает.

Любые мысли о том, почему это произойдет?

Ответ 1

Когда вы делите два int на значение с плавающей запятой, часть фракции будет потеряна. Если вы поместите один из элементов в float, вы не получите эту ошибку.

Итак, например, превратите 10 в 10.0

double returnValue = (myObject.Value / 10.0);

Ответ 2

Вы выполняете целочисленное деление, если myObject.Value - это int, поскольку обе стороны / имеют целочисленный тип.

Чтобы выполнить деление с плавающей запятой, одно из чисел в выражении должно иметь тип с плавающей запятой. Это было бы правдой, если myObject.Value было двойным или любым из следующих:

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;

Ответ 3

Целое число, деленное на целое число, вернет ваше целое число. Передайте значение Value в double или div на 10.0.

Ответ 4

Предполагая, что myObject.Value является int, уравнение myObject.Value / 10 будет целочисленным делением, которое затем будет передано в double.

Это означает, что myObject.Value равно 12 приведет к тому, что returnValue станет 1, а не 1.2.

Сначала нужно указать значения (ы):

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

Это приведет к правильному значению 1.2, по крайней мере, так же корректно, как и удвоения, позволит дать свои ограничения, но обсуждаемые в другом месте на SO почти бесконечно: -).

Ответ 5

Я думаю, поскольку myObject является int, вы должны

double returnValue=(myObject.Value/10.0);