C# 四舍五入至小数点后4位(C)#

C# 四舍五入至小数点后4位(C)#,c#,decimal,C#,Decimal,我有价值 8443.64625 并将其四舍五入到小数点后4位。当我使用decimal.Round(8443.64625,4,中点舍入.AwayFromZero)时,它给出值 8443.6463 。因此,它似乎是因为5轮。如何使其返回值 8443.6462 。 我可以将其转换为字符串,然后在4dp后截断,但我觉得必须有一种更有效的方法?您可以使用它,它会很好地工作,只需尝试一次。 它会给你想要的结果。 那是8443.6462 Math.Round(8443.64625, 4) 有人建议使

我有价值

8443.64625

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

8443.6463

。因此,它似乎是因为5轮。如何使其返回值

8443.6462


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

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

    Math.Round(8443.64625, 4)

有人建议使用
decimal.Round(8443.64625,4,middpointrounding.ToEven)
,但该注释似乎已被删除

中点舍入.ToEven
适用于我发布的场景是,但如果值为8443.64629,则会生成8443.6463。我需要它在不舍入的情况下截断

public static decimal TruncateValue(this decimal num, int significantDigits)
{
    decimal y = (decimal)Math.Pow(10, significantDigits);
    return Math.Truncate(num * y) / y;
}
我遇到了这个答案,它似乎在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);

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

这不是“舍入”本身,但你会得到我相信你想要的结果

即:

返回

8443.6462

也许你希望将
8443.64629
四舍五入到什么?实际上是四舍五入到最接近的偶数-尝试
Math.Round(8445.64635,4)
-它将返回
8445.6464
(这不是OP想要的,他们希望返回
8445.6463
)@MatthewWatson我想退回8443.6462do@BadDub但是您希望
8445.64635
返回什么?(这不是与
8445.64625
相同的数字-仔细看!一个以
35
结尾,另一个以
25
结尾)它适用于我发布的场景是的,但如果值是8443.64629,它将生成8443.6463。我需要它在不舍入的情况下截断。