我想将十进制值四舍五入到最多两点。但对于任何小于0.01的数字,我想返回0.01。
RoundUp(0.146,2) should return 0.15
RoundUp(0.0003,2) should return 0.01
在C#中,我目前正在使用Math.Round
,MidpointRounding.AwayFromZero
参数,但
Math.Round(0.0003, 2, MidpointRounding.AwayFromZero);
返回0
。
在Math命名空间中是否有任何内置方法,我可以使用它来获得所需的行为?
目前我正在使用此方法
private double GetRoundUpValue(double price, int roundUpto)
{
Debug.Assert(roundUpto == 2 || roundUpto == 3);
var val = Math.Round(price, roundUpto, MidpointRounding.AwayFromZero);
Double minValue = roundUpto == 2 ? 0.01 : 0.001;
return val < minValue ? minValue : val;
}
答案 0 :(得分:6)
但对于任何小于0.01的数字,我想返回0.01。
那么为什么不保持简单,只需使用这样的东西:
Math.Max(Math.Round(0.0003, 2, MidpointRounding.AwayFromZero), 0.01);
或者,如果您需要更通用的内容,要舍入 n 小数位,请使用以下内容:
private double GetRoundUpValue(double price, int places)
{
var minValue = Math.Pow(0.1, places);
return Math.Max(Math.Round(price, places, MidpointRounding.AwayFromZero), minValue);
}
另请注意,“四舍五入”与“四舍五入”不同(为此,您可以查看Math.Ceiling
)。因此,我建议您更改此方法的名称或更改其内部以更清楚实际内部的内容。
例如:
private double GetRoundUpValue(double price, int places)
{
var scale = Math.Pow(10, places);
return Math.Ceiling(price * scale) / scale;
}