当前位置: 首页 > 编程语言 > C#

C#学习教程:.NET4中的Math.Round()行为共享

时间:2023-04-10 16:12:36 C#

.NET4中的Math.Round()行为可能重复:在C#中:Math.Round(2.5)的结果为2(而非3)!你在开玩笑吧?.NetRoundBug我有一个中间值(number.5),我需要指定如何对其进行舍入(上限值或下限值)。我了解带有MidPointRounding参数的Math.Round的行为,但这并不能解决我的问题://ToEvenConsole.WriteLine(Math.Round(4.4));//4Console.WriteLine(Math.Round(4.5));//4Console.WriteLine(Math.Round(4.6));//5Console.WriteLine(Math.Round(5.5));//6//AwayFromZeroConsole.WriteLine(Math.Round(4.4));//4Console.WriteLine(Math.Round(4.5));//5Console.WriteLine(Math.Round(4.6));//5Console.WriteLine(Math.Round(5.5));//6//在一种情况下我需要Console.WriteLine(Math.Round(4.4));//4Console.WriteLine(Math.Round(4.5));//4Console.WriteLine(Math.Round(4.6));//5控制台.WriteLine(Math.Round(5.5));//5//另一种情况我需要Console.WriteLine(Math.Round(4.4));//4Console.WriteLine(Math.Round(4.5));//5Console.WriteLine(Math.Round(4.6));//5Console.WriteLine(Math.Round(5.5));//6Math.Round有一个从MidpointRounding获取枚举值的重载。为此有两个选项:看起来您想要的是一个不存在的MidpointRounding值TowardsZero或TowardsNegativeInfinity。唯一的选择是自己编写舍入代码。也许是这样的:(未经测试,可能无法很好地处理inf/nan等)doubleRoundTowardNegInfinity(doubleval){varfrac=val-Math.Truncate(val);如果(frac==0.5||frac==-0.5){returnMath.Floor(val);}返回Math.Round(val);}doubleRoundTowardZero(doubleval){varfrac=val-Math.Truncate(val);如果(frac==0.5||frac==-0.5){returnMath.Truncate(val);}返回Math.Round(val);Round方法有两种不同的舍入方法,您可以指定:value=Math.Round(value,MidpointRounding.ToEven);和:value=Math.Round(value,MidpointRounding.AwayFromZero);(如果未指定MidpointRounding值,则使用ToEven。)如果要四舍五入,请使用Ceiling方法:value=Math.Ceiling(value);如果要向下取整,使用Floor方法:value=Math.Floor(value);您可以根据需要使用Math.Round()、Math.Ceiling()或Math.Floor()。看看http://msdn.microsoft.com/en-us/library/ms131274.aspx,你可以使用Math.Round(Decimal,MidpointRounding)。查看带有MidpointRounding参数的Math.Round()调用。使用它,您可以指定ToEven(向最接近的偶数舍入)或AwayFromZero(从零舍入到最接近的数字)来更改舍入行为。以上就是C#学习教程:Math.Round()behaviorin.NET4的全部内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注.本文收集自网络,并不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处: