如果非零,则保持四舍五入到指定的数字

时间:2014-06-06 15:54:22

标签: c# .net math

我想将十进制值四舍五入到最多两点。但对于任何小于0.01的数字,我想返回0.01。

RoundUp(0.146,2) should return 0.15

RoundUp(0.0003,2) should return 0.01

在C#中,我目前正在使用Math.RoundMidpointRounding.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;
    }

1 个答案:

答案 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;
}