How to round a float value in c#?
c#, floating-point, rounding
Solution
You cannot express 0.8 exactly as a binary floating point value since 0.8 is not representable in binary floating point. Required reading on this topic is What Every Computer Scientist Should Know About Floating-Point Arithmetic.
You might use `decimal` instead, which represents numbers using decimal floating point and can represent 0.8 exactly. Or you might choose to continue using binary floating point, but only display limited numbers of digits after the decimal point.
To get the value into a `decimal` variable, rounded to two decimal places, you write:
decimal decimalValue = Math.Round((decimal)floatValue, 2);
Problem
I have a problem rounding a float value. I have a float value that is set 0.8 but in the c# code it is somehow 0.80000000000000004. So i want to round it so it becomes 0.8. i have tried: ``` float roundedFloatvalue = (float)Math.Round((Decimal)floatvalue, 2, MidpointRounding.AwayFromZero); ``` and: ``` float roundedFloatvalue = Truncate(floatvalue, 2); public static float Truncate(float value, int digits) { double mult = Math.Pow(10.0, digits); double result = Math.Truncate(mult * value) / mult; return (float)result; } ``` It just seems that i cant get 0.80000000000000004 to be 0.8 and i dont know why any of the above doesnt work.