将字符串浮点数列表转换为带有2个小数点的浮点数列表

时间:2013-08-09 14:43:09

标签: python list floating-point decimal

我的研究和做了几项改进,非常接近解决这个问题,但现在我被困住了,需要帮助。

任务:将字符串浮点数转换为带有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))

但是这给了我一个字符串浮动列表!! arghhhh

['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']

我在这里做错了什么?

由于

4 个答案:

答案 0 :(得分:5)

[round(float(i), 2) for i in mylist]

这应该有效。格式用于在其他字符串中插入字符串,如"Hello, {}! What is your favourite {}?".format("Jim", "colour")

如果您希望数字仅存在2位小数,则可以使用小数模块。

答案 1 :(得分:1)

你问了一个问题“我在这里做错了什么?”。 我认为,你做错了的是作为一个论点传递给:

floatlist.append()

这样:

"{0:.2f}".format(item)

str类的格式化方法只是返回格式化的字符串,并且你期望得到固定的两个小数点浮点数。 Float没有给出这样的选择。 user2387370是对的,你应该使用十进制。

答案 2 :(得分:0)

解决方案与Beer类似:

numpy

返回:

import numpy as np np.round( [float(i) for i in mylist], 2)

答案 3 :(得分:0)

我编写了以下代码,该代码将您的原始列表映射到您的"目标":

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]