我需要將一個double舍入到最接近的五個。我找不到使用Math.Round函數執行此操作的方法。我怎樣才能做到這一點?四捨五入到最接近的五個
我想要什麼:
70 = 70
73.5 = 75
72 = 70
75.9 = 75
69 = 70
等..
是否有一個簡單的方法來做到這一點?
我需要將一個double舍入到最接近的五個。我找不到使用Math.Round函數執行此操作的方法。我怎樣才能做到這一點?四捨五入到最接近的五個
我想要什麼:
70 = 70
73.5 = 75
72 = 70
75.9 = 75
69 = 70
等..
是否有一個簡單的方法來做到這一點?
嘗試:
Math.Round(value/5.0) * 5;
這工作:
5* (int)Math.Round(p/5.0)
+1因爲int比decimal更好,在sebastiaan的例子中,需要將會導致類似你的例子。所以你的是完整的。 – 2009-10-07 13:54:10
+1是的,這確實更好。 – user275587 2010-06-09 08:57:48
下面是一個簡單的程序,讓您驗證碼。 請注意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();
}
}
此方法應該適用於任何數字:Math.Round(value/n)* n(請參閱:http://stackoverflow.com/questions/326476/vba-how-to-round-to-最接近5或10或者x) – 2009-10-07 13:55:44
警告:由於浮點精度,這可能是「幾乎四捨五入」...... – tbischel 2013-04-14 16:51:11