如何在Python中打印许多重要数据?

时间:2012-02-23 15:26:06

标签: python

对于科学应用,我需要输出非常精确的数字,所以我必须打印15个有效数字。这里已经有关于此主题的问题,但它们都与截断数字有关,而不是打印更多

我意识到print函数会将输入float转换为10个字符string。此外,我开始意识到decimal模块,但这不符合我的需要。

所以问题是,如何轻松打印我的花车的可变数量,我需要显示超过10个?

6 个答案:

答案 0 :(得分:13)

您可以使用字符串格式化运算符%

In [3]: val = 1./3

In [4]: print('%.15f' % val)
0.333333333333333

str.format()

In [8]: print(str.format('{0:.15f}', val))
Out[8]: '0.333333333333333'

在新的代码中,后者是首选的样式,尽管前者仍然被广泛使用。

有关详细信息,请参阅documentation

答案 1 :(得分:10)

认为原始问题想要格式化n个有效数字,而不是n个小数点。因此,在提供更多本机内置类型之前,可能需要自定义函数? 所以你会想要这样的东西:

def float_nsf(q,n):
    """
    Truncate a float to n significant figures.  May produce overflow in 
    very last decimal place when q < 1.  This can be removed by an extra 
    formatted print. 
    Arguments:
      q : a float
      n : desired number of significant figures
    Returns:
    Float with only n s.f. and trailing zeros, but with a possible small overflow.
    """
    sgn=npy.sign(q)
    q=abs(q)
    n=int(npy.log10(q/10.)) # Here you overwrite input n!
    if q<1. :
        val=q/(10**(n-1))
    else:
        val=q/(10**n)
    return sgn*int(val)*10.**n

答案 2 :(得分:4)

使用这两种常见的打印习语进行格式化。这是个人品味的问题,更好。

value = 10/3            #gives a float of 3.33333.....

print '%.15f' % value
print str.format('{0:.15f}', value)

我个人认为第一个更紧凑,第二个更明确。使用多个val时,格式具有更多功能。

答案 3 :(得分:4)

让:

>>> num = 0.0012345

3个有效数字

>>> f'{num:.3}'
'0.00123'

对于 3个小数位

>>> f'{num:.3f}'
'0.001'

有关e, E, f, F, g, G, n, %, None提供的任何其他要求,请参见this section底部的“浮点数和小数的表示类型”表。

答案 4 :(得分:1)

你可以使用我写的这个功能,似乎工作正常,而且非常简单!:

def nsf(num, n=1):
    """n-Significant Figures"""
    numstr = ("{0:.%ie}" % (n-1)).format(num)
    return float(numstr)
  1. 首先使用指数表示法
  2. 将数字转换为字符串
  3. 然后将其作为 float 返回。
  4. 一些测试:

    >>> a = 2./3
    >>> b = 1./3
    >>> c = 3141592
    >>> print(nsf(a))
    0.7
    >>> print(nsf(a, 3))
    0.667
    >>> print(nsf(-a, 3))
    -0.667
    >>> print(nsf(b, 4))
    0.3333
    >>> print(nsf(-b, 2))
    -0.33
    >>> print(nsf(c, 5))
    3141600.0
    >>> print(nsf(-c, 6))
    -3141590.0
    

    我希望这可以帮助你;)

答案 5 :(得分:0)

要显示N个有效数字(不是小数位),请使用“ g”格式:

let i = 0;
function changeDynamicText() {
    var descriptions = ['list','of','strings','to','loop','over'];
    setTimeout(function () {
        document.getElementById("dynamicline").innerHTML = descriptions[i];
        changeDynamicText()
    }, 600);
    i = i + 1;
    if (i >= descriptions.length) i = 0;
}

有关精度的详细信息,请参见format spec

  

精度是一个十进制数字,指示应为几位数   在小数点后显示格式化的浮点值   带“ f”和“ F”,或在小数点前后浮动   点值格式为“ g”或“ G”。对于非数字类型,该字段   指示最大字段大小-换句话说,多少个字符   将从字段内容中使用。精度不允许   整数值。