在Python中将浮点数列表转换为字符串

13 投票
6 回答
36567 浏览
提问于 2025-04-18 05:04

我在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 会自动正确地对数字进行四舍五入(前提是你输入的数字本身就有两位小数,这样浮点数的误差就不会影响到四舍五入的结果)。

撰写回答