[New-bugs-announce] [issue1924] %i string format breaks for large floats (incomplete int conversion)

David Goodger report at bugs.python.org
Thu Jan 24 17:14:50 CET 2008


New submission from David Goodger:

I ran across this bug in some legacy production code when numbers got high:

>>> '%i' % 2e9
'2000000000'
>>> '%i' % 3e9
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: int argument required

It looks like the float is being automatically converted to an int, but
floats > sys.maxint cause an error.  However,

>>> int(3e9)
3000000000L

So the implicit float-to-int conversion is imperfect; large floats are
not being converted to long ints.

Same error in Python 2.3 through 2.6a0 (as of 2007-12-28).

In Python 2.1.3 & 2.2.3 the error is "OverflowError: float too large to
convert".  The same error is triggered by int(3e9) though.

While it's arguably not-quite-sane to have code that triggers this
error, the inconsistency is what concerns me.

----------
components: Interpreter Core
messages: 61635
nosy: goodger
severity: normal
status: open
title: %i string format breaks for large floats (incomplete int conversion)
type: behavior
versions: Python 2.3, Python 2.4, Python 2.5, Python 2.6

__________________________________
Tracker <report at bugs.python.org>
<http://bugs.python.org/issue1924>
__________________________________


More information about the New-bugs-announce mailing list