From: aditya on
To get the decimal representation of a binary number, I can just do
this:

int('11',2) # returns 3

But decimal binary numbers throw a ValueError:

int('1.1',2) # should return 1.5, throws error instead.

Is this by design? It seems to me that this is not the correct
behavior.

- Aditya
From: Patrick Maupin on
On Mar 30, 10:13 am, aditya <bluemangrou...(a)gmail.com> wrote:
> To get the decimal representation of a binary number, I can just do
> this:
>
> int('11',2) # returns 3
>
> But decimal binary numbers throw a ValueError:
>
> int('1.1',2) # should return 1.5, throws error instead.
>
> Is this by design? It seems to me that this is not the correct
> behavior.
>
> - Aditya

So, why should int('1.1', 2) throw an error when int('1.1') doesn't?

Regards,
Pat
From: Grant Olson on
On 3/30/2010 11:13 AM, aditya wrote:
> To get the decimal representation of a binary number, I can just do
> this:
>
> int('11',2) # returns 3
>
> But decimal binary numbers throw a ValueError:
>
> int('1.1',2) # should return 1.5, throws error instead.
>
> Is this by design? It seems to me that this is not the correct
> behavior.
>

Well technically that would be a 'radix point', not a decimal point.

But I think the problem is that computers don't store fractional values
that way internally. They either use floating or fixed point math. You
would never look at raw binary data on a computer and see something like
'1010.1010', and no one would write it that way, and no language (that I
know of) would accept that as a valid value if you did something like "x
= 0b1010.1010"

So in that sense, it might not be an intentional oversight, but it's not
a very practical or useful feature.
From: Benjamin Kaplan on
On Tue, Mar 30, 2010 at 11:13 AM, aditya <bluemangroupie(a)gmail.com> wrote:
> To get the decimal representation of a binary number, I can just do
> this:
>
> int('11',2) # returns 3
>
> But decimal binary numbers throw a ValueError:
>
> int('1.1',2) # should return 1.5, throws error instead.
>
> Is this by design? It seems to me that this is not the correct
> behavior.
>
> - Aditya
> --

Because int stands for integer and 1.1 is not an integer. You get the
same error if you try doing int('1.1')

> http://mail.python.org/mailman/listinfo/python-list
>
From: Raymond Hettinger on
On Mar 30, 8:13 am, aditya <bluemangrou...(a)gmail.com> wrote:
> To get the decimal representation of a binary number, I can just do
> this:
>
> int('11',2) # returns 3
>
> But decimal binary numbers throw a ValueError:
>
> int('1.1',2) # should return 1.5, throws error instead.
>
> Is this by design? It seems to me that this is not the correct
> behavior.

The int() constructor returns integers.
So, look to float() for non-integral values.
Binary representation isn't supported yet,
but we do have hex:

>>> float.fromhex('1.8')
1.5


Raymond