Вопрос по c#, math – Возможная потеря доли

111

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

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

double returnValue = (myObject.Value / 10);

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

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

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

Спасибо всем за отличные ответы. Теперь имеет смысл потерять десятичную точку при делении двух значений типа int. CodeLikeBeaker

Ваш Ответ

5   ответов
6

Целое число, разделенное на целое число, вернет вам целое число. Приведите либо значение к удвоению, либо поделите на 10,0.

56

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

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

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;
158

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

Так, например, превратить 10 в 10,0

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

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

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

Вам нужно сначала привести значение (я):

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

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

4

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

double returnValue=(myObject.Value/10.0); 

Похожие вопросы