Converting number in scientific notation to int

45,273

Solution 1

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.

Solution 2

Very Simple Solution

print(int(float(1e1)))

Steps:- 1- First you convert Scientific value to float. 2- Convert that float value to int . 3- Great you are able to get finally int data type.

Enjoy.

Share:
45,273
kezzos
Author by

kezzos

Updated on October 05, 2020

Comments

  • kezzos
    kezzos over 3 years

    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?