我试图在float变量中存储一个包含大量小数的值,但是我收到了这个错误。
打印长(' 37.7745985956747')回溯(最近一次通话):
文件"< stdin>",第1行,< module> ValueError:无效的文字 long()with base 10:' 37.7745985956747'
我已经在这里回顾了所有其他建议的问题,但似乎没有解决我的问题,他们都提到了字符串中存在的其他非数字字符。
我已审核了Decimal
和Float
,似乎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
非常感谢任何建议!
答案 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;。他们根本不会存储小数。