我需要将双精度取整到最接近的5。我找不到使用Math.Round函数执行此操作的方法。我怎样才能做到这一点?
我想要的是:
70 = 70
73.5 = 75
72 = 70
75.9 = 75
69 = 70
等等..
是否有捷径可寻?
Answers:
这有效:
5* (int)Math.Round(p / 5.0)
这是一个简单的程序,可让您验证代码。请注意MidpointRounding参数,如果没有它,您将舍入到最接近的偶数,在您的情况下,这意味着相差5(在72.5示例中)。
class Program
{
public static void RoundToFive()
{
Console.WriteLine(R(71));
Console.WriteLine(R(72.5)); //70 or 75? depends on midpoint rounding
Console.WriteLine(R(73.5));
Console.WriteLine(R(75));
}
public static double R(double x)
{
return Math.Round(x/5, MidpointRounding.AwayFromZero)*5;
}
static void Main(string[] args)
{
RoundToFive();
}
}
我这样做是这样的:
int test = 5 * (value / 5);
对于上面的下一个值(第5步),只需添加5。
您还可以编写一个通用函数:
选项1-方法
public int Round(double i, int v)
{
return (int)(Math.Round(i / v) * v);
}
并像这样使用它:
var value = Round(72, 5);
选项2-扩展方法 public static double Round(此double值,int roundTo)
{
return (int)(Math.Round(value / roundTo) * roundTo);
}
并像这样使用它:
var price = 72.0;
var newPrice = price.Round(5);