Возможная потеря фракции
Простите меня, если это наивный вопрос, однако сегодня я в недоумении.
У меня есть простой расчет распределения, например:
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);