有没有办法使用map函数将".2f" % (num)
之类的东西映射到数字列表?
通常要打印一个数字列表,我会做类似以下的事情:
>>> a = [1.003,2.004,3.005]
>>> print " ".join(map(str, a))
1.003 2.004 3.005
但是我会用什么方法代替下划线来获得下面所需的输出?
>>> print " ".join(map(____, a))
1.00 2.00 3.01
修改
澄清一下,四舍五入并不重要。 3.00也有效。
答案 0 :(得分:8)
a = [1.003,2.004,3.005]
print " ".join(map("{:.2f}".format, a))
<强>输出强>
1.00 2.00 3.00
注意:默认情况下,Python将3.005
舍入为3.00
答案 1 :(得分:1)
要格式化所描述的列表,请使用list comprehension
>>> print " ".join("%.2f" % n for n in a)
或者,如果你真的想使用map:
>>> print " ".join(map((lambda n: "%.2f" % n), a))
如上所述,但是浮动的四舍五入有一些特点。有关详细信息,请参阅here和here。
如果你真的想要精确的四舍五入,你可以用decimal.Decimal
来实现这一点,例如:
>>> import decimal
>>> a = ['1.003', '2.004', '3.005']
>>> ctx = decimal.Context(prec=3, rounding=decimal.ROUND_HALF_UP)
>>> print " ".join(str(ctx.create_decimal(n)) for n in a)
['1.00', '2.00', '3.01']
然而,这意味着使用字符串而不是浮点作为输入。
答案 2 :(得分:1)
您可以使用列表推导来生成字符串并打印它们,但正如Ashwini Chaudhary在评论中所说的那样,使用字符串格式'.2f'
无法获得3.005的3.01a = [1.003,2.004,3.005]
b = ' '.join(['{:.2f}'.format(num) for num in a])
print(b) # 1.00 2.00 3.00
答案 3 :(得分:1)
这里有很多好的解决方案。但它们似乎不符合您的预期产量。这是因为round函数处理浮点数的方式(阅读Note in the docs)。解决方案是使用小数进行精确舍入:
from decimal import *
" ".join(map(lambda x: str(Decimal(str(x)).quantize(Decimal('.01'), rounding=ROUND_HALF_UP)), a))
# '1.00 2.00 3.01'
答案 4 :(得分:0)
要获取“舍入%.2f”,您可以在输入中添加0.001
a = [1.003, 2.004, 3.005]
# add 0.001 to round up
print(' '.join(map('{:.2f}'.format, [x + 0.001 for x in a])))
1.00 2.00 3.01
例如0.005-> 0.006-> 0.01
[x + 0.001 for x in a]
部分称为“列表理解”
我很确定,这比使用小数模块要快
答案 5 :(得分:0)
datetime(2020, 4, 16, 11, 22, 32,tzinfo=<DstTzInfo 'US/Central' CDT-1 day, 19:00:00 DST>