pyExcelerator big integer values

John Machin sjmachin at
Wed Jan 10 01:08:25 CET 2007

On Jan 10, 12:30 am, "Gacha" <gatis.toms... at> wrote:
 > I use pyExcelerator to import some data from xml file. One column
 > contains integer values like:
 > 4750456000708
 > 4750456000715
 > 4750456000333

I think you must mean "xls", not "xml".

Those are integers only in the mathematical sense. The value of each 
number cell in an XLS file is treated as a 64-bit floating point number. 
How do you know that they are whole numbers? What you see on-screen with 
Excel etc is not necessarily what you've got. If you format your column 
with 0 decimal places, 4750456000708.123 will show as 4750456000708

However, whether they are whole numbers or not, you still have a problem 
on the Python side:

 > ...
 > But when I do import the pyExcelerator converts them to something like
 > this:
 > 4.7504560002e+12
 > 4.7504560007e+12
 > 4.7504560007e+12
 > 4.7504560003e+12

No it doesn't. It converts the XLS file data to Python float type -- 
64-bit floating point numbers. There is no loss of precision.

What you are seeing are different visual presentations of the *same* 
object. Perhaps this will explain:

| >>> for x in (4750456000708.0, 4750456000708.123):
| ...     print x, str(x), repr(x)
| ...
| 4.75045600071e+012 4.75045600071e+012 4750456000708.0
| 4.75045600071e+012 4.75045600071e+012 4750456000708.123
| >>>

 > How I understand it's because the integer value is too big.

A 12-digit integer is too big for what?

 > If the type
 > of the items was string, then all would be fine, but I can't control
 > the file content.
 > The question is, how can I import the integers in normal format.

The answer is, there is no such thing as "normal format". Normality, 
like beauty, is in the eye of the beholder. You have a value, how you 
format it for display depends on your purpose. If what you want is to 
see the most precise representation of what you've got, then use repr().


More information about the Python-list mailing list