从高精度数中将C#舍入到2位小数

时间:2011-12-04 04:05:10

标签: c# rounding

如何在C#中舍入以下数字以获得以下结果。

价值:500.0349999999

在舍入到小数点后的2位数后:500.04

我已尝试Math.Round(Value,2, MidpointRounding.AwayFromZero); //但它返回值500.03而不是500.04

2 个答案:

答案 0 :(得分:2)

您要求的是非标准的舍入规则。舍入到最接近的百分之一的值500.03499999999应为500.03。由于千分之一的数字小于5,所以百分之一的数字保持不变。

我可以看到实现所需结果的一种方法是将数字四舍五入到小于您最终想要的小数位数。然后将结果舍入到您想要的精度。

在您的示例中,您可以将值四舍五入到小数点后3位,从而得到500.035。然后,您可以将其舍入到2位小数,这应该会产生500.04(假设您正在使用MidpointRounding.AwayFromZero

希望有所帮助。

答案 1 :(得分:0)

你可以使它变得不必要复杂并在for循环中包装一个变量Round(Decimal,Int32)函数。减少Int32以使其恢复到所需的小数精度。这是一些工作,但像埃里克所说,你要求的是非标准的舍入规则。

额外详情:http://msdn.microsoft.com/en-us/library/ms131274.aspx