MidpointRounding.AwayFromZero
本文关键字:AwayFromZero MidpointRounding | 更新日期: 2023-09-27 18:15:14
为什么以下代码返回1299.49 ?根据msdn文档,它应该是1299.5。
Console.WriteLine(Math.Round( 1299.492, 2, MidpointRounding.AwayFromZero))
您将四舍五入到小数点后两位,因此返回1299.49。
如果你想要1299.5,四舍五入到小数点后1位。
Console.WriteLine(Math.Round( 1299.492, 1, MidpointRounding.AwayFromZero))
来自AwayFromZero的文档:
当一个数位于另外两个数的中间时,将其舍入到离0最近的那个数。
https://msdn.microsoft.com/en-us/library/system.midpointrounding (v = vs.110) . aspx
您可能对这种重载是如何工作的感到困惑。根据MSDN上的MidpointRounding:
当一个数位于另外两个数的中间时,将其舍入到离0最近的那个数。
在你的例子中,1299.492不在1229.49和1299.50的中间,所以MidpointRounding.AwayFromZero
甚至不适用。
看起来你实际上要做的是将四舍五入到最接近的小数点后两位。在这种情况下,您想要这样的答案:
public static double RoundUp(double input, int places)
{
double multiplier = Math.Pow(10, Convert.ToDouble(places));
return Math.Ceiling(input * multiplier) / multiplier;
}
通过乘以10^places
(如果需要2位,则为100),调用Math.Ceiling
,然后除以,四舍五入到指定的小数点后十位。
如此:
Console.WriteLine(RoundUp(1299.492, 2)); // 1299.5