所以我想四舍五入所以它成为0.8。
我已经试过了: $ $ $ $ $ $ $> float roundedFloatvalue =(float)Math 。((十进制)floatvalue,2,MidpointRounding.AwayFromZero);
和:
float roundedFloatvalue =截断(floatvalue,2); public static float Truncate(float value,int digits) { double mult = Math.Pow(10.0,digits); double result = Math.Truncate(mult * value)/ mult; 返回(浮动)结果; $ b $ p $ b看来,我不能得到0.80000000000000004为0.8,我不知道为什么上面的任何一个都行不通。
解决方案由于0.8不能用二进制表示浮点。有关此主题的必读信息,请参阅每位计算机科学家应了解的有关Floating-点算术。
您可以使用 decimal 代替使用十进制浮点数的数字正好代表0.8。或者你可以选择继续使用二进制浮点数,但只显示小数点后的有限数字。
要将值存入
十进制decimalValue = Math.Round(十进制)变量,四舍五入到小数点后两位, (十进制)floatValue,2);
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.
解决方案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);
更多推荐
如何在C#中的浮点值?
发布评论