Math.Round为十进制

Jee*_*van 3 c# rounding

我正在运行此代码:

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的错误吗?

Jon*_*eet 8

不,这不是一个错误.你的逻辑谈论四舍五入 - 但你只有一个电话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将只执行一个.