我正在运行此代码:
decimal d = 1.45M;
Console.WriteLine((System.Math.Round(d,0,MidpointRounding.AwayFromZero).ToString()));
Run Code Online (Sandbox Code Playgroud)
在这里我期望输出为2,因为当舍入到第一个小数位时,1.45将是1.5,当下一个舍入到0小数位时应该是2.
但是,我得到的答案是1.
我的假设是否正确?如果是这样,这是Math.Round的错误吗?
不,这不是一个错误.你的逻辑谈论四舍五入 - 但你只有一个电话Round.1.45小于1和2(1.5)之间的中点,因此它向下舍入为1.
如果您希望代码遵循您的逻辑,您可以这样做:
using System;
class Test
{
static void Main()
{
decimal d = 1.45m;
d = Math.Round(d, 1, MidpointRounding.AwayFromZero); // 1.5
d = Math.Round(d, 0, MidpointRounding.AwayFromZero); // 2
Console.WriteLine(d);
}
}
Run Code Online (Sandbox Code Playgroud)
除非你指定你想要两个舍入阶段(如上所述),.NET将只执行一个.