Как округлить до ближайшего числа X - псевдокод для VBScript

Я пытаюсь округлить число до ближайшего, скажем, 15, 20, 30. т.е.

726 с точностью до 30 составляет 700

714 с точностью до 15 - это 700 и т. Д.

Код VBScript был бы очень полезен, но псевдокод также был бы огромным подспорьем!

РЕДАКТИРОВАТЬ: Извините, я забыл сказать, что 726 - это время, выраженное как int, то есть 07:26. Это должно быть 07:00, а не 690

Снова ИЗМЕНИТЬ: Я просто извлекаю минуту и ​​использую код, которым люди ответили. Надеюсь, это поможет и кому-то другому. Спасибо!

Спасибо


person Igor K    schedule 16.08.2010    source источник
comment
Я думаю, вы имеете в виду, что 726 (округлено в меньшую сторону), до ближайших 30 - 720, а 714 (округлено в меньшую сторону), до ближайших 15 - это 705.   -  person Daniel Renshaw    schedule 16.08.2010
comment
Да, я забыл упомянуть, что это действительно время, пожалуйста, посмотрите вопрос. Действительно сожалею, моя ошибка   -  person Igor K    schedule 16.08.2010
comment
не могли бы вы дополнительно уточнить, как время, подобное 17:45, будет отображаться в вашем представлении int, и если последние 2 цифры когда-либо превышают 59 ...   -  person Oded    schedule 16.08.2010
comment
Спасибо Одед, все отсортировано с вашим исходным кодом   -  person Igor K    schedule 16.08.2010


Ответы (3)


Псевдокод:

diff = num mod nearest
return num - diff

Итак, 726 мод 30 = 6

726 - 6 = 720

vbscript:

Function GetNearest(num, nearest)
    Dim diff = num mod nearest
    GetNearest = num - diff
End Function
person Oded    schedule 16.08.2010
comment
Я думал, что по модулю это остаток, то есть 726 по модулю 30 = 6 :) - person akonsu; 16.08.2010
comment
Спасибо, Одед, ваш ответ был идеальным, просто мой вопрос не был. - person Igor K; 16.08.2010
comment
Я думаю, что в вашем исходном ответе была опечатка, поэтому я поставил свой комментарий. - person akonsu; 16.08.2010
comment
На самом деле, в VBScript я только что получил минутку и использовал эту функцию, отлично работает, большое спасибо - person Igor K; 16.08.2010

Вы указали несколько языков в своих тегах. Я использую C #, но более общий алгоритм:

int n = 726;
int q = 30;
int r = Math.Floor(n / q) * q;
person Toby    schedule 16.08.2010
comment
Math.Floor (n / q) совпадает с n / q, если все переменные являются целыми числами. - person akonsu; 16.08.2010
comment
@akonsu: Верно, но не обязательно на всех языках. Я подумал, что сделаю пол более явным для использования с языками сценариев, где типы могут путаться. - person Toby; 16.08.2010
comment
Спасибо, цените это то же самое, что использовать MOD - person Igor K; 16.08.2010

другой способ сделать это - просто использовать целочисленное деление: 726/30 * 30 = 720

person akonsu    schedule 16.08.2010