四舍五入到C#

时间:2020-03-02 13:39:18

标签: c# decimal

我有值

8443.64625

,并想将其四舍五入到小数点后四位。当我使用decimal.Round(8443.64625, 4, MidpointRounding.AwayFromZero)时,它会给出值

8443.6463

。因此,由于5的缘故,它似乎是四舍五入的。我该怎么做才能使其返回值

8443.6462

。 我可以将其转换为字符串,然后在4dp之后截断,但是我觉得必须有一种更有效的方法?

4 个答案:

答案 0 :(得分:0)

您可以使用它,它将正常工作,只需尝试一次即可。 它会给您您想要的结果。 那是8443.6462。

    Math.Round(8443.64625, 4)

答案 1 :(得分:0)

有人建议使用decimal.Round(8443.64625, 4, MidpointRounding.ToEven),但该评论似乎已被删除。

MidpointRounding.ToEven适用于我发布的方案,但是如果值是8443.64629,它将产生8443.6463。我需要它来截断而不四舍五入。

我遇到了这个答案,它似乎在4dp之后截断,没有四舍五入。

public static decimal TruncateValue(this decimal num, int significantDigits)
{
    decimal y = (decimal)Math.Pow(10, significantDigits);
    return Math.Truncate(num * y) / y;
}

答案 2 :(得分:0)

这有效

Z

答案 3 :(得分:0)

我不知道是否已经回答了这个问题,但是,您可以使用Truncate

这本身并不是“四舍五入”,但您会得到我认为想要的结果。

即:

double num = 8443.64625;
Math.Truncate(10000 * num) / 10000

返回

8443.6462