Convert '165.0' to int

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat Jul 23 10:23:26 CEST 2011


Frank Millman wrote:

> To recap, the original problem is that it would appear that some third-
> party systems, when serialising int's into a string format, add a .0
> to the end of the string. I am trying to get back to the original int
> safely.
> 
> The ideal solution is the one I sketched out earlier - modify python's
> 'int' function to accept strings such as '165.0'.
> 
> Do you think this would get any traction if I proposed it? Or would it
> fall foul of the moratorium?

No, and no. It would not get any traction -- indeed, many people, including
myself, would oppose it. And it would not fall foul of the moratorium,
because that is over.

I can only point you to what I wrote in reference to somebody else's idea
that changing Python was the most "convenient solution":

http://www.mail-archive.com/python-list%40python.org/msg315552.html

Python is a general purpose programming language. If int("1.0") does not do
what you want, write a function that does, and use it instead! You said
that you want a function that ignores a trailing .0 but warns you if
there's some other decimal value. Easy:

def my_int(astring):
    # Untested
    if astring.endswith(".0"):
        astring = astring[:-2]
    return int(astring)

my_int("165.0") will return 165, as expected, while still raising an
exception for float values "165.1" or "165.1E9".

90% of programming is deciding *precisely* what behaviour you want. Once
you've done that, the rest is easy.

Apart from debugging and writing documentation and making it fast enough,
which is the other 90%.

*wink*


-- 
Steven




More information about the Python-list mailing list