设置全局输出精度python

jim*_*ist 5 python formatting

我编写了一个函数库,使我的工程作业更容易,并在python解释器中使用它们(有点像计算器).一些返回矩阵,一些返回浮点数.

问题是,它们返回太多小数.例如,目前,当一个数字为0时,我得到一个非常小的数字作为回报(例如6.123233995736766e-17)

我知道如何单独格式化输出,但这需要为我在解释器中键入的每一行添加格式化程序.我正在使用python 2.6.

有没有办法为会话设置全局输出格式(精度等)?

*注意:对于scipy功能,我知道我可以使用

scipy.set_printoptions(precision = 4, suppress = True)
Run Code Online (Sandbox Code Playgroud)

但这对于不使用scipy的函数似乎不起作用.

Mar*_*arc 10

对于 numpy,您可以使用该set_printoptions方法(http://docs.scipy.org/doc/numpy/reference/ generated /numpy.set_printoptions.html)。

例如:

import numpy as np
np.set_printoptions(precision=4)
print(np.pi * np.arange(8))
Run Code Online (Sandbox Code Playgroud)


Blc*_*ght 7

一个想法是添加from __future__ import print_function(在最顶部),然后覆盖标准打印功能.这是一个非常简单的实现,它在小数点后打印精确两位数的浮点数:

def print(*args):
    __builtins__.print(*("%.2f" % a if isinstance(a, float) else a
                         for a in args))
Run Code Online (Sandbox Code Playgroud)

您需要更新输出代码才能使用print函数,但至少它是通用的,而不是每个地方都需要自定义格式规则.如果要更改格式的工作方式,只需更改自定义print函数即可.


Rol*_*ith 5

您所看到的是十进制浮点数只能由二进制浮点近似的事实。请参阅浮点算法:问题和局限性

您可以在模块库中放置模块级别的变量,并将其用作round()舍入模块中函数返回值的第二个参数,但这很麻烦。

如果您使用ipython(我建议互动使用,比常规解释器好得多),则可以使用'magic'函数%precision