Quantcast

round down to nearest number

classic Classic list List threaded Threaded
17 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

round down to nearest number

noydb-2
How do you round down ALWAYS to nearest 100?  Like, if I have number
3268, I want that rounded down to 3200.  I'm doing my rounding like
>>> round(3268, -2)
But, how to round DOWN?
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Ian Kelly-2
On Thu, Feb 9, 2012 at 5:30 PM, noydb <[hidden email]> wrote:
> How do you round down ALWAYS to nearest 100?  Like, if I have number
> 3268, I want that rounded down to 3200.  I'm doing my rounding like
>>>> round(3268, -2)
> But, how to round DOWN?

>>> 3268 // 100 * 100
3200

For more complicated cases, Decimal objects allow you to specify
alternate rounding modes.
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

noydb-2
In reply to this post by noydb-2
hmmm, okay.

So how would you round UP always?  Say the number is 3219, so you want
3300 returned.
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Chris Kaynor
On Thu, Feb 9, 2012 at 5:23 PM, noydb <[hidden email]> wrote:
hmmm, okay.

So how would you round UP always?  Say the number is 3219, so you want
3300 returned.

You may want to look into the mathematical floor and ceiling functions[1]. Python exposes them in the math module as floor and ceil[2].

 
--
http://mail.python.org/mailman/listinfo/python-list


--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Chris Kaynor
On Thu, Feb 9, 2012 at 5:40 PM, Chris Kaynor <[hidden email]> wrote:
On Thu, Feb 9, 2012 at 5:23 PM, noydb <[hidden email]> wrote:
hmmm, okay.

So how would you round UP always?  Say the number is 3219, so you want
3300 returned.

You may want to look into the mathematical floor and ceiling functions[1]. Python exposes them in the math module as floor and ceil[2].

 

I should have added, you can use multiplication and division to apply those functions to other digits rather than the base one. For example, multiply by 10, floor, divide by ten, will floor to one decimal point.
 



--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Chris Rebert-6
In reply to this post by noydb-2
On Thu, Feb 9, 2012 at 5:23 PM, noydb <[hidden email]> wrote:
> hmmm, okay.
>
> So how would you round UP always?  Say the number is 3219, so you want
> 3300 returned.

http://stackoverflow.com/questions/17944/how-to-round-up-the-result-of-integer-division/96921

Thus: (3219 + 99) // 100

Slight tangent: Beware negative numbers when using // or %.

Cheers,
Chris
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Ian Kelly-2
On Thu, Feb 9, 2012 at 6:43 PM, Chris Rebert <[hidden email]> wrote:

> On Thu, Feb 9, 2012 at 5:23 PM, noydb <[hidden email]> wrote:
>> hmmm, okay.
>>
>> So how would you round UP always?  Say the number is 3219, so you want
>> 3300 returned.
>
> http://stackoverflow.com/questions/17944/how-to-round-up-the-result-of-integer-division/96921
>
> Thus: (3219 + 99) // 100
>
> Slight tangent: Beware negative numbers when using // or %.

There's no problem with negative numbers here, as long as you actually
want to round *up* or *down*, as opposed to away from zero or toward
zero.
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

noydb-2
In reply to this post by Chris Rebert-6
That {>>> (3219 + 99) // 100} doesnt work if the number is other then
4 digits.


(for rounding up to nearest 100):
>>> (3219 + 99)//100
33
>>> (3289 + 99)//100
33
>>> (328678 + 99)//100
3287
>>> (328 + 99)//100
4
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Terry Reedy
In reply to this post by noydb-2
On 2/9/2012 8:23 PM, noydb wrote:
> So how would you round UP always?  Say the number is 3219, so you want
 >>> (3333//100+1)*100
3400

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

MRAB-2
In reply to this post by noydb-2
On 10/02/2012 02:25, noydb wrote:

> That {>>>  (3219 + 99) // 100} doesnt work if the number is other then
> 4 digits.
>
>
> (for rounding up to nearest 100):
>>>>  (3219 + 99)//100
> 33
>>>>  (3289 + 99)//100
> 33
>>>>  (328678 + 99)//100
> 3287
>>>>  (328 + 99)//100
> 4

 >>> (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.
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

MRAB-2
In reply to this post by Terry Reedy
On 10/02/2012 03:29, Terry Reedy wrote:
> On 2/9/2012 8:23 PM, noydb wrote:
>>  So how would you round UP always?  Say the number is 3219, so you want
>   >>>  (3333//100+1)*100
> 3400
>
Doing it that way doesn't always work. For example:

 >>> (3400 // 100 + 1) * 100
3500

However:

 >>> (3400 + 99) // 100 * 100
3400
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Ian Kelly-2
In reply to this post by MRAB-2
On Thu, Feb 9, 2012 at 8:36 PM, MRAB <[hidden email]> wrote:

> On 10/02/2012 02:25, noydb wrote:
>>
>> That {>>>  (3219 + 99) // 100} doesnt work if the number is other then
>> 4 digits.
>>
>>
>> (for rounding up to nearest 100):
>>>>>
>>>>>  (3219 + 99)//100
>>
>> 33
>>>>>
>>>>>  (3289 + 99)//100
>>
>> 33
>>>>>
>>>>>  (328678 + 99)//100
>>
>> 3287
>>>>>
>>>>>  (328 + 99)//100
>>
>> 4
>
>
>>>> (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

A more consistent alternative is to negate the number, round down, and
then negate again.

>>> -(-(3300.5) // 100 * 100)
3400.0

Cheers,
Ian
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Arnaud Delobelle-3
On 10 February 2012 06:21, Ian Kelly <[hidden email]> 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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Alec Taylor
o.O

Very nice

On Fri, Feb 10, 2012 at 8:58 PM, Arnaud Delobelle <[hidden email]> wrote:

> On 10 February 2012 06:21, Ian Kelly <[hidden email]> 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
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

noydb-2
In reply to this post by Ian Kelly-2
On Feb 10, 4:58 am, Arnaud Delobelle <[hidden email]> wrote:

> On 10 February 2012 06:21, Ian Kelly <[hidden email]> 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- Hide quoted text -
>
> - Show quoted text -

Thanks!  Covers all bases, good.
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Olive
In reply to this post by noydb-2
On Thu, 9 Feb 2012 17:43:58 -0800
Chris Rebert <[hidden email]> wrote:

> On Thu, Feb 9, 2012 at 5:23 PM, noydb <[hidden email]> wrote:
> > hmmm, okay.
> >
> > So how would you round UP always?  Say the number is 3219, so you
> > want 3300 returned.
>
> http://stackoverflow.com/questions/17944/how-to-round-up-the-result-of-integer-division/96921
>
> Thus: (3219 + 99) // 100
>
> Slight tangent: Beware negative numbers when using // or %.

This trick work always (even if the entry is a float):


-(-a//100)*100

>>> -(-3219//100)*100
3300

>>> -(-3200.1//100)*100

3300.0

--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: round down to nearest number

Hrvoje Niksic
In reply to this post by noydb-2
Terry Reedy <[hidden email]> writes:

> On 2/9/2012 8:23 PM, noydb wrote:
>> So how would you round UP always?  Say the number is 3219, so you want
>>>> (3333//100+1)*100
> 3400

Note that that doesn't work for numbers that are already round:

>>> (3300//100+1)*100
3400    # 3300 would be correct

I'd go with Chris Rebert's (x + 99) // 100.
--
http://mail.python.org/mailman/listinfo/python-list
Loading...