views:

167

answers:

3

Hey

I'm trying to round down a number to the nearest say 15, 20, 30. ie

726 to the nearest 30 is 700

714 to the nearest 15 is 700 etc

VBScript code would be very helpful but pseudocode would also be a huge help!

EDIT: Sorry, I forgot to say, that 726 is really a time expressed as an int, ie 07:26. So this should be 07:00, not 690

EDIT Again: I'm just extracting the minute and using the code people have answered with. Hopefully this will help someone else too. Thanks!

Thanks

+1  A: 

Pseudo code:

diff = num mod nearest
return num - diff

So 726 mod 30 = 6

726 - 6 = 720

vbscript:

Function GetNearest(num, nearest)
    Dim diff = num mod nearest
    GetNearest = num - diff
End Function
Oded
i thought that modulo is a remainder, that is 726 mod 30 = 6 :)
akonsu
@akonsu - quite correct. It's also what I wrote.
Oded
Thanks Oded, your answer was perfect, just my question wasnt.
Igor K
@oded: i think there was a typo in your original answer that is why i put my comment.
akonsu
Actually, in VBScript, I've just got the minute out and used this function, works perfectly, thanks so much
Igor K
A: 

You listed a bunch of languages in your tags. I'm going with C#, but a more generic algorithm:

int n = 726;
int q = 30;
int r = Math.Floor(n / q) * q;
Toby
Math.Floor(n / q) is the same as n / q if all the variables are integers.
akonsu
@akonsu: True, but not necessarily in all languages. I thought I'd make the flooring more explicit for use with scripting languages where the types can get muddled.
Toby
Thanks, appreciate this is just the same as using MOD
Igor K
A: 

another way to do it is just to use integer division: 726 / 30 * 30 = 720

akonsu