Кто-нибудь имеет хороший способ округлить down Число от 0 до 59 до ближайшего 15. Я использую C# 3.5.C# - значения округления до ближайшей четверти часа
Итак ...
- 1 будет 0
- 29 будет 15
- 30 будет 30
и т.д. и т.п.
Большое спасибо.
Кто-нибудь имеет хороший способ округлить down Число от 0 до 59 до ближайшего 15. Я использую C# 3.5.C# - значения округления до ближайшей четверти часа
Итак ...
и т.д. и т.п.
Большое спасибо.
x = x - (x % 15)
будет решение, которое не зависит на целочисленном делении.
Как насчет (x/15) * 15?
Вы можете использовать целочисленное деление -
int number = 43;
int newNumber = number/15;
int rounded = newNumber * 15;
gee ... Должно быть, я прав. –
@No Refunds No Returns: Только если x является целым типом ... –
В качестве метода расширения на DateTime
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
Я не знаю, как зовут библиотеку для этого (например .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;
}
}
Он также может использовать фальшивую фреймворк, чтобы издеваться над целым, чтобы лучше тестировать (плюс без всех накладных расходов на выделение целых чисел в стеке). – Pierreten
um no ... момент времени заключается в том, что я предполагаю, что это на веб-сайте, и, вероятно, много этого происходит, вот и все ... –
Это дает неправильный ответ для отрицательных чисел. –
Это где оператор модуль поставляется в очень удобной
number - (number % 15)
Вы должны будете убедитесь, что x является целым типом, во-первых, однако ... (или, по крайней мере, литой x/15 в int) –
Пока это int. –