在 C# 中舍入到 4 位小数

Rounding to 4 Decimal Places in C#

我有值

8443.64625

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

8443.6463

。所以它似乎因为 5 而四舍五入。我该怎么做才能使它 return 值

8443.6462

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

您可以使用它,它会很好地工作只需尝试一次。 它会给你你想要的结果。 那是 8443.6462.

    Math.Round(8443.64625, 4)

有人建议使用 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;
}

这个有效

var num = 8443.64625;

var roundedNum = Math.Round(num, 4, MidpointRounding.ToEven);

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

这不是 'rounding' 本身,但你会得到我相信你想要的结果。

即:

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

returns

8443.6462