>>> float('25') 25.0 >>> int('25.2') Traceback (most recent call last): File "<pyshell#26>", line 1, in <module> int('25.2') ValueError: invalid literal for int() with base 10: '25.2'
Why do I get an error on int(‘25.2′) and don’t get one on float(’25’)?
Advertisement
Answer
Python is trying to prevent you from accidentally losing the information after the decimal point by converting a string to an integer when you should have converted it to a float.
However, it does allow converting a float to an integer, so with a little more explicit code you can convert a string with a decimal point to an integer:
>>> float('1.6') 1.6 >>> int('1.6') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '1.6' >>> int(1.6) 1 >>> int(float('1.6')) 1 >>> round(1.6) 2 >>> round(float('1.6')) 2 >>> round(float('1.2')) 1
Note that int
always rounds down, simply dropping the fractional part, while round
rounds to the nearest integer.