# Re: Division help in python

Discussion in 'Python' started by Chris Angelico, Sep 7, 2012.

1. ### Chris AngelicoGuest

On Fri, Sep 7, 2012 at 10:53 PM, Ramyasri Dodla <> wrote:
> I am brand new to python. checking over basic stuff. I came across the
> problem while doing so. If any body aware of the problem, kindly respond me.
>
>>>> 5/10

> 0
>>>> - 5/10

> -1
>
> The second case also should yield a 'zero' but it is giving a -1

You're clearly using Python 2, because in Python 3, the / operator
will return a float instead (so these would return 0.5 and -0.5
respectively). But it's helpful to mention what Python version you're
using when you ask for help

The reason for this is that / (or in Python 3, //) rounds toward
negative infinity, not toward zero. This allows the modulo operator
(%) to return a positive number, while still maintaining the normal
expectation that:

(x//y)*y + (x%y) == x

for any two integers x and y.

Hope that helps!

ChrisA

Chris Angelico, Sep 7, 2012

2. ### Guest

Chris Angelico <> wrote:
> On Fri, Sep 7, 2012 at 10:53 PM, Ramyasri Dodla <> wrote:
>> I am brand new to python. checking over basic stuff. I came across the
>> problem while doing so. If any body aware of the problem, kindly respond me.
>>
>>>>> 5/10

>> 0
>>>>> - 5/10

>> -1
>>
>> The second case also should yield a 'zero' but it is giving a -1

>
>

....

> The reason for this is that / (or in Python 3, //) rounds toward
> negative infinity, not toward zero. This allows the modulo operator

I think he means the non-obvious unary minus precedence.

--
-----------------------------------------------------------
| __..--^^^--..__ garabik @ kassiopeia.juls.savba.sk |
-----------------------------------------------------------
Antivirus alert: file .signature infected by signature virus.
Hi! I'm a signature virus! Copy me into your signature file to help me spread!

, Sep 8, 2012

3. ### Hans MulderGuest

On 8/09/12 09:03:12, wrote:
> Chris Angelico <> wrote:
>> On Fri, Sep 7, 2012 at 10:53 PM, Ramyasri Dodla <> wrote:
>>> I am brand new to python. checking over basic stuff. I came across the
>>> problem while doing so. If any body aware of the problem, kindly respond me.
>>>
>>>>>> 5/10
>>> 0
>>>>>> - 5/10
>>> -1
>>>
>>> The second case also should yield a 'zero' but it is giving a -1

>>

> ...
>
>> The reason for this is that / (or in Python 3, //) rounds toward
>> negative infinity, not toward zero. This allows the modulo operator

>
> I think he means the non-obvious unary minus precedence.

That seems unlikely. Unary minus has lower precedence in
Python than in most other programming languages, but its
precedence is higher than division, so this example doesn't
show the difference.

For example, in C unary opeators have the highest precedence.
Yet -5/10 returns 0, not because of precedence, but because C
rounds towards zero.

Hope this helps,

-- HansM

Hans Mulder, Sep 8, 2012