How convert string '1e7' to an integer?

Discussion in 'Python' started by Peng Yu, Nov 8, 2009.

  1. Peng Yu

    Peng Yu Guest

    It seems that int() does not convert '1e7'. I'm wondering what
    function to use to convert '1e7' to an integer?

    >>> int('1e7')

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '1e7'
    Peng Yu, Nov 8, 2009
    #1
    1. Advertising

  2. Peng Yu

    Mensanator Guest

    On Nov 7, 7:17 pm, Peng Yu <> wrote:
    > It seems that int() does not convert '1e7'.


    Because 'e' isn't a valid character in base 10.

    > I'm wondering what
    > function to use to convert '1e7' to an integer?
    >
    > >>> int('1e7')


    >>> int(1e7)

    10000000


    >
    > Traceback (most recent call last):
    >   File "<stdin>", line 1, in <module>
    > ValueError: invalid literal for int() with base 10: '1e7'
    Mensanator, Nov 8, 2009
    #2
    1. Advertising

  3. Peng Yu wrote:
    > It seems that int() does not convert '1e7'.

    It seems it does, though:

    >>> int('1e7', base=16)

    487

    Mick.
    Mick Krippendorf, Nov 8, 2009
    #3
  4. Peng Yu

    Gary Herron Guest

    Mensanator wrote:
    > On Nov 7, 7:17 pm, Peng Yu <> wrote:
    >
    >> It seems that int() does not convert '1e7'.
    >>

    >
    > Because 'e' isn't a valid character in base 10.
    >


    But 1e7 is a valid float, so this works:

    >>> int(float('1e7'))

    10000000

    That has a problem though, if you surpass the ability of a float:

    >>> int(float('1e20'))

    100000000000000000000L
    >>> int(float('1e30'))

    1000000000000000019884624838656L


    Gary Herron



    >
    >> I'm wondering what
    >> function to use to convert '1e7' to an integer?
    >>
    >>
    >>>>> int('1e7')
    >>>>>

    >
    >
    >>>> int(1e7)
    >>>>

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

    >
    >
    Gary Herron, Nov 8, 2009
    #4
  5. Peng Yu

    Tim Chase Guest

    Mick Krippendorf wrote:
    > Peng Yu wrote:
    >> It seems that int() does not convert '1e7'.

    > It seems it does, though:
    >
    >>>> int('1e7', base=16)

    > 487


    Bah...so narrow-minded ;-)

    >>> print '\n'.join("Base %i: %i" % (base, int('1e7',

    base=base)) for base in range(15,37))
    Base 15: 442
    Base 16: 487
    Base 17: 534
    Base 18: 583
    Base 19: 634
    Base 20: 687
    Base 21: 742
    Base 22: 799
    Base 23: 858
    Base 24: 919
    Base 25: 982
    Base 26: 1047
    Base 27: 1114
    Base 28: 1183
    Base 29: 1254
    Base 30: 1327
    Base 31: 1402
    Base 32: 1479
    Base 33: 1558
    Base 34: 1639
    Base 35: 1722
    Base 36: 1807

    I feel so dirty interpreting numbers in convenient ways...like an
    accountant. ("whaddaya mean I can't file my tax-return in base
    17?! There's nothing in the supporting documentation that
    mentions such draconian restrictions!")

    -tkc
    Tim Chase, Nov 8, 2009
    #5
  6. Gary Herron schreef:
    > Mensanator wrote:
    >> On Nov 7, 7:17 pm, Peng Yu <> wrote:
    >>
    >>> It seems that int() does not convert '1e7'.
    >>>

    >> Because 'e' isn't a valid character in base 10.
    >>

    >
    > But 1e7 is a valid float, so this works:
    >
    > >>> int(float('1e7'))

    > 10000000
    >
    > That has a problem though, if you surpass the ability of a float:
    >
    > >>> int(float('1e20'))

    > 100000000000000000000L
    > >>> int(float('1e30'))

    > 1000000000000000019884624838656L


    If that is a concern, decimal can help:

    >>> import decimal
    >>> int(decimal.Decimal('1e30'))

    1000000000000000000000000000000L

    --
    The saddest aspect of life right now is that science gathers knowledge
    faster than society gathers wisdom.
    -- Isaac Asimov

    Roel Schroeven
    Roel Schroeven, Nov 8, 2009
    #6
  7. Peng Yu

    Thomas Guest

    Just a curiosity, why does Python do this?

    >>> l = [(base, int('1e7', base=base)) for base in range(15,37)]
    >>> l

    [(15, 442), (16, 487), (17, 534), (18, 583), (19, 634), (20, 687),
    (21, 742), (22, 799), (23, 858), (24, 919), (25, 982), (26, 1047),
    (27, 1114), (28, 1183), (29, 1254), (30, 1327), (31, 1402), (32,
    1479), (33, 1558), (34, 1639), (35, 1722), (36, 1807)]
    >>> l = ([base, int('1e7', base=base)] for base in range(15,37))
    >>> l

    <generator object at 0x027803A0>
    >>>
    Thomas, Nov 8, 2009
    #7
  8. Thomas wrote:
    > Just a curiosity, why does Python do this?
    >
    >>>> [(base, int('1e7', base=base)) for base in range(15,37)]

    > [(15, 442), (16, 487), (17, 534), (18, 583), (19, 634), (20, 687),
    > (21, 742), (22, 799), (23, 858), (24, 919), (25, 982), (26, 1047),
    > (27, 1114), (28, 1183), (29, 1254), (30, 1327), (31, 1402), (32,
    > 1479), (33, 1558), (34, 1639), (35, 1722), (36, 1807)]
    >>>> ([base, int('1e7', base=base)] for base in range(15,37))

    > <generator object at 0x027803A0>

    Because the former is a list comprehension, whereas the latter is a
    generator expression.

    Mick.
    Mick Krippendorf, Nov 8, 2009
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. les ander
    Replies:
    4
    Views:
    863
    wes weston
    Oct 5, 2004
  2. MRAB
    Replies:
    0
    Views:
    427
  3. Benjamin Kaplan

    Re: How convert string '1e7' to an integer?

    Benjamin Kaplan, Nov 8, 2009, in forum: Python
    Replies:
    0
    Views:
    786
    Benjamin Kaplan
    Nov 8, 2009
  4. news
    Replies:
    2
    Views:
    1,103
  5. Randy Kramer
    Replies:
    12
    Views:
    359
    Robert Klemme
    Oct 25, 2007
Loading...

Share This Page