将字符串浮点数列表转换为具有 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 个小数点的浮点数列表的主要内容,如果未能解决你的问题,请参考以下文章

Abplc浮点数怎么传给4个字节

如何格式化具有最大小数位数且没有额外零填充的浮点数?

c语言如何让输出结果精确到两位小数

精度浮点型数据精确到了几位小数呢?

将字符串中的数字转换为 c 中的浮点数:atof()、strtof() 不起作用

如何在具有固定浮点的matlab中转换变量