Possible Loss of Fraction

C#Math

C# Problem Overview


Forgive me if this is a naïve question, however I am at a loss today.

I have a simple division calculation such as follows:

double returnValue = (myObject.Value / 10);

Value is an int in the object.

I am getting a message that says Possible Loss of Fraction. However, when I change the double to an int, the message goes away.

Any thoughts on why this would happen?

C# Solutions


Solution 1 - C#

When you divide two int's into a floating point value the fraction portion is lost. If you cast one of the items to a float, you won't get this error.

So for example turn 10 into a 10.0

double returnValue = (myObject.Value / 10.0);

Solution 2 - C#

You're doing integer division if myObject.Value is an int, since both sides of the / are of integer type.

To do floating-point division, one of the numbers in the expression must be of floating-point type. That would be true if myObject.Value were a double, or any of the following:

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;

Solution 3 - C#

An integer divided by an integer will return your an integer. Cast either Value to a double or divide by 10.0.

Solution 4 - C#

Assuming that myObject.Value is an int, the equation myObject.Value / 10 will be an integer division which will then be cast to a double.

That means that myObject.Value being 12 will result in returnValue becoming 1, not 1.2.

You need to cast the value(s) first:

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

This would result in the correct value 1.2, at least as correct as doubles will allow given their limitations but that's discussed elsewhere on SO, almost endlessly :-).

Solution 5 - C#

I think since myObject is an int, you should

double returnValue=(myObject.Value/10.0); 

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCodeLikeBeakerView Question on Stackoverflow
Solution 1 - C#Ólafur WaageView Answer on Stackoverflow
Solution 2 - C#lc.View Answer on Stackoverflow
Solution 3 - C#CambiumView Answer on Stackoverflow
Solution 4 - C#paxdiabloView Answer on Stackoverflow
Solution 5 - C#segfaultView Answer on Stackoverflow