在Python中将浮点数列表转换为字符串
我在Python里有一个浮点数的列表,当我把它转换成字符串的时候,得到了以下结果:
[1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]
这些浮点数在我创建的时候是有两位小数的(我觉得是这样),
然后我使用了:
str(mylist)
我该怎么做才能得到一个有两位小数的字符串呢?
======================
让我更具体一点,我想要的结果是一个字符串,并且我想保留分隔符:
"[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
6 个回答
1
str([round(i, 2) for i in mylist])
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。
2
去掉单引号:
>>> 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]'
- ['{:.2f}'.format(x) for x in nums] 这段代码会生成一个字符串列表,就像接受的答案中说的那样。
- ', '.join([list]) 这段代码会把列表里的元素合成一个字符串,中间用', '隔开。
- '[{:s}]'.format(joined_string) 这段代码会在字符串的两边加上方括号。
3
map(lambda n: '%.2f'%n, [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001])
map()
函数会对第二个参数中每一个元素,使用第一个参数中传入的可调用对象(比如函数)进行处理。
4
如果你想保持完全的精确度,语法上最简单、最清晰的方法似乎是
mylist = list(map(str, mylist))
16
使用字符串格式化可以得到你想要的小数位数。
>>> 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
会自动正确地对数字进行四舍五入(前提是你输入的数字本身就有两位小数,这样浮点数的误差就不会影响到四舍五入的结果)。