# round down to nearest number

17 messages
Open this post in threaded view
|
Report Content as Inappropriate

## round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 On Thu, Feb 9, 2012 at 5:23 PM, noydb 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 On Thu, Feb 9, 2012 at 5:40 PM, Chris Kaynor wrote: On Thu, Feb 9, 2012 at 5:23 PM, noydb 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 -- http://mail.python.org/mailman/listinfo/python-list
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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/96921Thus: (3219 + 99) // 100 Slight tangent: Beware negative numbers when using // or %. Cheers, Chris -- http://mail.python.org/mailman/listinfo/python-list
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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
Open this post in threaded view
|
Report Content as Inappropriate

## Re: round down to nearest number

 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