Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting number in scientific notation to int

Could someone explain why I can not use int() to convert an integer number represented in string-scientific notation into a python int?

For example this does not work:

print int('1e1') 

But this does:

print int(float('1e1'))  print int(1e1)  # Works 

Why does int not recognise the string as an integer? Surely its as simple as checking the sign of the exponent?

like image 923
kezzos Avatar asked Sep 30 '15 08:09

kezzos


People also ask

How do I get rid of E+ in Excel?

Unfortunately excel does not allow you to turn this functionality off by default. However if you select your data, right click, and click "Format cells..." and choose Number you can stop excel from changing your data to scientific notation.


1 Answers

Behind the scenes a scientific number notation is always represented as a float internally. The reason is the varying number range as an integer only maps to a fixed value range, let's say 2^32 values. The scientific representation is similar to the floating representation with significant and exponent. Further details you can lookup in https://en.wikipedia.org/wiki/Floating_point.

You cannot cast a scientific number representation as string to integer directly.

print int(1e1)  # Works 

Works because 1e1 as a number is already a float.

>>> type(1e1) <type 'float'> 

Back to your question: We want to get an integer from float or scientific string. Details: https://docs.python.org/2/reference/lexical_analysis.html#integers

>>> int("13.37") Traceback (most recent call last):   File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '13.37' 

For float or scientific representations you have to use the intermediate step over float.

like image 166
wenzul Avatar answered Sep 22 '22 03:09

wenzul