Python如何计算一个精确到小数的列表字符串?

标签 python python-2.7 floating-point decimal

我有一个像这样列表的字符串

list_str = '[148654.08425925925, 148656.99994212962, 148658.08229166668, 148661.0020601852]'

然后我使用 eval() 将其转换为 Python 中的真实列表对象

print eval(list_str)

但是,输出是我不想要的四舍五入

0 = {float} 148654.084259
1 = {float} 148656.999942
2 = {float} 148658.082292
3 = {float} 148661.00206

我怎样才能让它保持字符串中的值(精确的十进制)?

我需要使用 eval(),因为它也会使用此列表上的其他操作

最佳答案

float 由二进制分数表示,在与您正在使用的点分十进制表示形式( see here )进行相互转换时,会出现精度损失。 python decimal package实现十进制浮点运算并且没有这个限制。

您不能使用 eval 来分解列表,因为这些值将计算为 float ,但您可以使用正则表达式包提取 float 并从那里构建列表。

>>> import decimal
>>> import re
>>> list_str = '[148654.08425925925, 148656.99994212962, 148658.08229166668, 148661.0020601852]'
>>> items = [decimal.Decimal(x) for x in re.findall(r'\d+\.?\d*', list_str)]
>>> items
[Decimal('148654.08425925925'), Decimal('148656.99994212962'), Decimal('148658.08229166668'), Decimal('148661.0020601852')]
>>> 

关于Python如何计算一个精确到小数的列表字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348682/

相关文章:

python - Python 中的重写与虚拟类方法

c - pow() 转换为整数,意外结果

python - 被一行Python难住了

python - 如何拟合数据集以便它们共享一些(但不是全部)参数值

python - 适合初学者的 Python 类(class)

python - 将 bash/shell 行转换为 python 2.6

python - 更换 Shell 管道

python - Scrapy:如何从其他 python 脚本运行 spider 两次或更多次?

c++ - 为什么那个类型是 double 而不是 float?

for-loop - 带有 float 的 GoLang for 循环会产生错误