我在Python中有一个浮点列表,当我将它转换为字符串时,我得到了以下内容
[1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]
当我创建它们时,这些浮点数在小数点后面有2位数字(我相信如此),
然后我用了
str(mylist)
如何获得小数点后2位数的字符串?
======================
让我更具体一点:
我希望得到类似" [1883.95,1878.33,1869.43,1863.40]"
之后我需要进行一些字符串操作。例如+ ="!\ t!"
我希望最终结果是一个字符串,我想保留分隔符。
当然我们都知道如何在循环中完成它,但希望有人能够以非常智能和优雅的方式来实现它。
受@senshin的启发,以下代码可以作为例子,但我认为还有更好的方法
msg = "["
for x in mylist:
msg += '{:.2f}'.format(x)+','
msg = msg[0:len(msg)-1]
msg+="]"
print msg
谢谢!
答案 0 :(得分:10)
使用字符串格式来获得所需的小数位数。
>>> nums = [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]
>>> ['{:.2f}'.format(x) for x in nums]
['1883.95', '1878.33', '1869.43', '1863.40']
格式字符串{:.2f}
表示“在小数点后面的两个位置打印定点数(f
)(.2
)”。 str.format
将自动对数字进行正确舍入(假设您输入的数字首先包含两个小数位,在这种情况下,浮点错误将不足以使舍入混乱)。
答案 1 :(得分:2)
map(lambda n: '%.2f'%n, [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001])
map()
调用第一个参数中传递的callable,作为第二个参数传递的list / iterable中的每个元素。
答案 2 :(得分:1)
摆脱'标志:
>>> nums = [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]
>>> '[{:s}]'.format(', '.join(['{:.2f}'.format(x) for x in nums]))
'[1883.95, 1878.33, 1869.43, 1863.40]'
答案 3 :(得分:0)
如果您想保持全精度,那么语法上最简单/最清晰的方法似乎就是
mylist = map(str, mylist)