我的研究和做了几项改进,非常接近解决这个问题,但现在我被困住了,需要帮助。
任务:将字符串浮点数转换为带有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']
我在这里做错了什么?
由于
答案 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]