将存储为字符串的非常大的数字转换为数字

时间:2015-11-29 02:38:01

标签: python python-2.7

我试图在float变量中存储一个包含大量小数的值,但是我收到了这个错误。

  

打印长(' 37.7745985956747')回溯(最近一次通话):
  文件"< stdin>",第1行,< module> ValueError:无效的文字   long()with base 10:' 37.7745985956747'

我已经在这里回顾了所有其他建议的问题,但似乎没有解决我的问题,他们都提到了字符串中存在的其他非数字字符。

我已审核了DecimalFloat,似乎float会截断数字,而Decimal会引发错误:

>>> a = '-122.425891675136'
>>> print float(a)
-122.425891675
>>> from decimal import *
>>> print decimal(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'decimal' is not defined

非常感谢任何建议!

3 个答案:

答案 0 :(得分:1)

根据help()long()将数字或字符串转换为长整数。 '37.7745985956747'不代表整数,因此long()无法解析它。如果你确实需要long(),那么你必须long(float('37.7745985956747')),这将产生37L

答案 1 :(得分:0)

long无法用于解析表示带小数点的数字的字符串。可能令人困惑的是,它可用于将浮点数转换为类似long(37.7)的长数。

因此,您需要先将数字转换为float,然后使用long将其截断。

答案 2 :(得分:0)

您需要Decimal

正如文档所说,

  

十进制数字可以准确表示。

此外,

  

与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为28个位置),这可以与给定问题所需的一样大。

如您所见,它适用于您指定的输入:

>>> from decimal import Decimal
>>> Decimal('37.7745985956747')
Decimal('37.7745985956747')

尽管如此,至少在我的结尾,float,FWIW:

也是如此
>>> float('37.7745985956747')
37.7745985956747

你绝对不想要long,因为那些是&#34;长整数对象&#34;。他们根本不会存储小数。