python将float列表转换为string

时间:2014-05-01 23:49:17

标签: python list formatting floating-point-precision floating-point-conversion

我在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

谢谢!

4 个答案:

答案 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]'
  • [' {:。2f}' .format(x)for x in nums] 制作字符串列表,如接受的答案所示。
  • ',' .join([list])返回一个字符串','插入列表元素之间。
  • ' [{:s}]' .format(joined_string)添加括号。

答案 3 :(得分:0)

如果您想保持全精度,那么语法上最简单/最清晰的方法似乎就是

mylist = map(str, mylist)