Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   round down to nearest number (http://www.velocityreviews.com/forums/t868139-round-down-to-nearest-number.html)

 noydb 02-10-2012 12:30 AM

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?

 Ian Kelly 02-10-2012 12:47 AM

Re: round down to nearest number

On Thu, Feb 9, 2012 at 5:30 PM, noydb <jenn.duerr@gmail.com> 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.

 noydb 02-10-2012 01:23 AM

Re: round down to nearest number

hmmm, okay.

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

 Chris Rebert 02-10-2012 01:43 AM

Re: round down to nearest number

On Thu, Feb 9, 2012 at 5:23 PM, noydb <jenn.duerr@gmail.com> wrote:
> hmmm, okay.
>
> So how would you round UP always? Â*Say the number is 3219, so you want
> 3300 returned.

http://stackoverflow.com/questions/1...division/96921

Thus: (3219 + 99) // 100

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

Cheers,
Chris

 Ian Kelly 02-10-2012 02:00 AM

Re: round down to nearest number

On Thu, Feb 9, 2012 at 6:43 PM, Chris Rebert <clp2@rebertia.com> wrote:
> On Thu, Feb 9, 2012 at 5:23 PM, noydb <jenn.duerr@gmail.com> wrote:
>> hmmm, okay.
>>
>> So how would you round UP always? *Say the number is 3219, so you want
>> 3300 returned.

>
> http://stackoverflow.com/questions/1...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.

 noydb 02-10-2012 02:25 AM

Re: round down to nearest number

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

 Terry Reedy 02-10-2012 03:29 AM

Re: round down to nearest number

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

 MRAB 02-10-2012 03:36 AM

Re: round down to nearest number

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.

 MRAB 02-10-2012 03:39 AM

Re: round down to nearest number

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

 Ian Kelly 02-10-2012 06:21 AM

Re: round down to nearest number

On Thu, Feb 9, 2012 at 8:36 PM, MRAB <python@mrabarnett.plus.com> 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

All times are GMT. The time now is 02:14 AM.