在python中轻松打印浮点数?

2024-09-28 21:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张花车的清单。如果我只是print它,它显示如下:

[9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]

我可以使用print "%.2f",这将需要一个for循环来遍历列表,但是对于更复杂的数据结构,它就不起作用了。 我想要这样的东西(我完全在编造)

>>> import print_options
>>> print_options.set_float_precision(2)
>>> print [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
[9.0, 0.05, 0.03, 0.01, 0.06, 0.08]

Tags: import数据结构列表forfloatprecisionoptionsprint
3条回答

你可以做:

a = [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
print ["%0.2f" % i for i in a]

正如noone所添加的,应该注意的是,从Python2.6+开始,建议使用string formating的方法是使用^{},为Python3+做好准备

print ["{0:0.2f}".format(i) for i in a]

The newstring formating syntax使用起来并不困难,但功能相当强大

我想那可能是{a5}可能有什么,但我什么也没发现

一个更持久的解决方案是子类float

>>> class prettyfloat(float):
    def __repr__(self):
        return "%0.2f" % self

>>> x
[1.290192, 3.0002, 22.119199999999999, 3.4110999999999998]
>>> x = map(prettyfloat, x)
>>> x
[1.29, 3.00, 22.12, 3.41]
>>> y = x[2]
>>> y
22.12

子类化float的问题在于它破坏了显式查找变量类型的代码。但据我所知,这是唯一的问题。而一个简单的x = map(float, x)将撤消到prettyfloat的转换

不幸的是,你不能仅仅是猴子补丁float.__repr__,因为float是不可变的

如果您不想将float子类化,但不介意定义一个函数,map(f, x)[f(n) for n in x]简洁得多

相关问题 更多 >