为了账号安全,请及时绑定邮箱和手机立即绑定

在python中轻松漂亮地打印浮点数?

在python中轻松漂亮地打印浮点数?

四季花海 2019-11-29 10:04:13
我有一个花车清单。如果我只是简单地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]
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

这是一个老问题,但是我要添加一些可能有用的东西:


我知道您是在原始Python列表中编写示例的,但是如果您决定使用numpy数组代替(这在您的示例中是完全合法的,因为您似乎正在处理数字数组),那么(几乎完全是)此命令可以说你编造了:


import numpy as np

np.set_printoptions(precision=2)

如果您仍然想查看真正精确数字的所有小数,但要摆脱尾随零的情况,就更好了,例如,使用格式化字符串%g:


np.set_printoptions(formatter={"float_kind": lambda x: "%g" % x})

对于仅打印一次且不更改全局行为的情况,请使用np.array2string与上述相同的参数。


查看完整回答
反对 回复 2019-11-29
?
慕仙森

TA贡献1827条经验 获得超8个赞

正如没有人添加的那样,应该注意的是,从Python 2.6+开始,推荐的字符串格式化方法是使用format,以便为Python 3+做好准备。


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

新的 字符串格式语法不难使用,但功能非常强大。


我虽然pprint可能有一些东西,但是我什么也没发现。


查看完整回答
反对 回复 2019-11-29
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

一个更永久的解决方案是子类化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__因为monkey-patch而已,因为它float是不可变的。


如果您不想继承子类float,但又不介意定义一个函数,map(f, x)则比起简单得多[f(n) for n in x]


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 1065 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信