# round down to nearest number

Alec Taylor alec.taylor6 at gmail.com
Fri Feb 10 12:05:39 CET 2012

```o.O

Very nice

On Fri, Feb 10, 2012 at 8:58 PM, Arnaud Delobelle <arnodel at gmail.com> wrote:
> On 10 February 2012 06:21, Ian Kelly <ian.g.kelly at gmail.com> wrote:
>>>>>> (3219 + 99) // 100 * 100
>>> 3300
>>>>>> (3289 + 99) // 100 * 100
>>> 3300
>>>>>> (328678 + 99) // 100 * 100
>>> 328700
>>>>>> (328 + 99) // 100 * 100
>>> 400
>>>
>>> Those are all rounded up to the nearest 100 correctly.
>>
>> One thing to be aware of though is that while the "round down" formula
>> works interchangeably for ints and floats, the "round up" formula does
>> not.
>>
>>>>> (3300.5 + 99) // 100 * 100
>> 3300.0
>>
>
> I'm surprised I haven't seen:
>
>>>> 212 - (212 % -100)
> 300
>
> Here's a function that:
> * rounds up and down
> * works for both integers and floats
> * is only two operations (as opposed to 3 in the solutions given above)
>
>>>> def round(n, k):
> ...     return n - n%k
> ...
>>>> # Round down with a positive k:
> ... round(167, 100)
> 100
>>>> round(-233, 100
> ... )
> -300
>>>> # Round up with a negative k:
> ... round(167, -100)
> 200
>>>> round(-233, -100)
> -200
>>>> # Edge cases
> ... round(500, -100)
> 500
>>>> round(500, 100)
> 500
>>>> # Floats
> ... round(100.5, -100)
> 200.0
>>>> round(199.5, 100)
> 100.0
>
> --
> Arnaud
> --
> http://mail.python.org/mailman/listinfo/python-list

```