# [Numpy-discussion] annoying numpy string to float conversion behaviour

Torgil Svensson torgil.svensson at gmail.com
Wed Jun 20 04:35:49 EDT 2007

```Hi

Is there a reason for numpy.float not to convert it's own string
representation correctly?

Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
(Intel)] on win32>>> import numpy
>>> numpy.__version__
'1.0.3'
>>> numpy.float("1.0")
1.0
>>> numpy.nan
-1.#IND
>>> numpy.float("-1.#IND")
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
numpy.float("-1.#IND")
ValueError: invalid literal for float(): -1.#IND
>>>

Also, nan and -nan are represented differently for different float to
string conversion methods. I guess the added zeros are a bug
somewhere.
>>> str(nan)
'-1.#IND'
>>> "%f" % nan
'-1.#IND00'
>>> str(-nan)
'1.#QNAN'
>>> "%f" % -nan
'1.#QNAN0'

This is a problem when floats are stored in text-files that are later
read to be numerically processed. For now I use the following to
convert the number.

special_numbers=dict([('-1.#INF',-inf),('1.#INF',inf),
('-1.#IND',nan),('-1.#IND00',nan),
('1.#QNAN',-nan),('1.#QNAN0',-nan)])
def string_to_number(x):
if x in special_numbers:
return special_numbers[x]
return float(x) if ("." in x) or ("e" in x) else int(x)

Is there a simpler way that I missed?

Best Regards,

//Torgil

```