Вопрос по c#, math – Возможная потеря доли
Простите, если это наивный вопрос, однако сегодня я в растерянности.
У меня есть простой расчет деления, такой как:
double returnValue = (myObject.Value / 10);
Значение - это int в объекте.
Я получаю сообщение о возможной потере доли. Однако, когда я заменяю double на int, сообщение исчезает.
Любые мысли о том, почему это произойдет?
Вы делаете целочисленное деление, если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;
При условии, что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, почти бесконечно :-).