|
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 |
|
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 |
|
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 |
|
On Thu, Feb 9, 2012 at 5:23 PM, noydb <[hidden email]> wrote: hmmm, okay. 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]. [2] http://docs.python.org/library/math.html#math.floor and http://docs.python.org/library/math.html#math.ceil
-- -- http://mail.python.org/mailman/listinfo/python-list |
|
On Thu, Feb 9, 2012 at 5:40 PM, Chris Kaynor <[hidden email]> wrote:
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
| Powered by Nabble | Edit this page |
