在 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
我有值
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