将字符串浮点数列表转换为具有 2 个小数点的浮点数列表
Posted
技术标签:
【中文标题】将字符串浮点数列表转换为具有 2 个小数点的浮点数列表【英文标题】:Convert a list of string floats to a list of floats with 2 decimal points 【发布时间】:2013-08-11 13:05:48 【问题描述】:我进行了研究并进行了一些改进,非常接近解决此问题,但现在我陷入困境并需要帮助。
任务:将字符串浮点数列表转换为带 2 个小数点的浮点数
原名单:
mylist = ['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']
目标
mylist = [17.21, 33.40, 24.39, 3.48, 1.02, 0.61, 18.03, 1.84]
我的脚本尝试
mylisttwo = map(float, mylist)
它给了我这个
[17.21, 33.4, 24.39, 3.48, 1.02, 0.60999999999999999, 18.03, 1.84]
然后我想到了id格式化
floatlist = []
for item in mylisttwo:
floatlist.append("0:.2f".format(item))
但这又给了我一个字符串浮动列表!!啊啊啊
['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']
我在这里做错了什么?
谢谢
【问题讨论】:
如果您希望它们作为浮点数并打算用它们进行计算,我不会费心将它们四舍五入到小数点后 2 位,直到您需要显示它们。 你为什么在乎? (严肃的问题。)0.60999999999999999
是否足以满足您的目的?如果没有,为什么不呢?
【参考方案1】:
[round(float(i), 2) for i in mylist]
这应该可以。格式用于在其他字符串中插入字符串,如"Hello, ! What is your favourite ?".format("Jim", "colour")
。
如果你想让数字只存在2个小数位,你可以使用decimal模块。
【讨论】:
由于浮点数在 python 中的表示方式,舍入不准确:docs.python.org/2/library/functions.html#round,但您的答案似乎比简单地说“它不可能”更相关,如此处所述类似的问题:***.com/questions/14540143/… 我知道我哪里出错了,谢谢。但在我使用的软件中,它给了我这个 [17.21, 33.4, 24.39, 3.48, 1.02, 0.60999999999999999, 18.03, 1.84]。由于某种原因,索引 5 未四舍五入到小数点后两位。 查看上面的评论,计算机以二进制工作,所以就像以 10 为底,我们不能将 1/3 精确地表示为十进制 - 它是 0.33333333333... - 没有无限内存的计算机无法准确存储一些浮点数。 使用 Decimal 模块怎么样?round
在这里没有帮助:您的 round(float(i), 2)
不会改变任何事情。 float("0.61")
已经返回最接近0.61
的可表示浮点数,round
调用的结果将再次成为最接近0.61
的可表示浮点数。【参考方案2】:
您问了一个问题“我在这里做错了什么?”。 我认为,您做错了什么是作为参数传递给:
floatlist.append()
这个:
"0:.2f".format(item)
str 类的 Format 方法只是简单地返回格式化字符串,并且您期望得到固定的两位小数点浮点数。 Float 没有提供这样的选项。 user2387370 是对的,你应该使用十进制。
【讨论】:
【参考方案3】:解决方法与numpy
类似:
import numpy as np
np.round( [float(i) for i in mylist], 2)
返回:
array([ 17.21, 33.4 , 24.39, 3.48, 1.02, 0.61, 18.03, 1.84])
【讨论】:
【参考方案4】:我编写了以下代码,获取您的原始列表并将其映射到您的“目标”:
from decimal import Decimal
def str_to_float_with_precision(item):
precision = 2
return float(Decimal(item, precision))
items = ['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']
floated_items = map(str_to_float_with_precision, items)
print floated_items
结果:
[17.21, 33.4, 24.39, 3.48, 1.02, 0.61, 18.03, 1.84]
【讨论】:
以上是关于将字符串浮点数列表转换为具有 2 个小数点的浮点数列表的主要内容,如果未能解决你的问题,请参考以下文章