# pyExcelerator big integer values

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

```On Jan 10, 12:30 am, "Gacha" <gatis.toms... at gmail.com> 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().

HTH,
John

```