有没有人有一个好方法可以将向下一个0到59之间的数字四舍五入到最接近的15。 我正在使用C#3.5。
所以......
等等。
非常感谢。
答案 0 :(得分:24)
x = x - (x % 15)
将是一个不依赖于整数除法的解决方案。
答案 1 :(得分:10)
作为日期时间的扩展方法
public static DateTime RoundDown(this DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month,
dateTime.Day, dateTime.Hour, (dateTime.Minute / 15) * 15, 0);
}
使用
DateTime date = dateTime.Now.RoundDown();//for example
答案 2 :(得分:5)
(x / 15)* 15怎么样?
答案 3 :(得分:4)
我不知道这个库的调用(如.Round(...)),也许扩展方法很适合?
我会选择一个简单的IF语句。
如果速度是个问题,请为每个值尝试扩展的switch语句。如果这是一个问题,请使用单元测试来查看更新。
完成......
//...
[TestMethod]
public void round_down()
{
Assert.AreEqual(-5.RoundDown(), 0);
Assert.AreEqual(0.RoundDown(), 0);
Assert.AreEqual(1.RoundDown(), 0);
Assert.AreEqual(20.RoundDown(), 15);
Assert.AreEqual(42.RoundDown(), 30);
Assert.AreEqual(48.RoundDown(), 45);
Assert.AreEqual(59.RoundDown(), 45);
Assert.AreEqual(90.RoundDown(), 45);
}
// ...
public static class Ext
{
public static int RoundDown(this int val)
{
if (val < 0)
return 0;
if (val < 15)
return 0;
if (val < 30)
return 15;
if (val < 45)
return 30;
return 45;
}
}
答案 4 :(得分:3)
您可以使用整数除法 -
int number = 43;
int newNumber = number / 15;
int rounded = newNumber * 15;
答案 5 :(得分:0)
这是模数运算符非常方便的地方
number - (number % 15)