繁体   English   中英

如何在 Python 中打印许多有效数字?

[英]How can I print many significant figures in Python?

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

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

所以问题是,我怎样才能轻松地打印我的花车的可变数量的重要数字,我需要显示超过 10 个?

让:

>>> num = 0.0012345

对于3 个有效数字

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

对于3 个小数位

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

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

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

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'

在新代码中,后者是首选风格,尽管前者仍被广泛使用。

有关更多信息,请参阅文档

以为原始问题要格式化 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=np.sign(q)
    q=abs(q)
    n=int(np.log10(q/10.)) # Here you overwrite input n!
    if q<1. :
        val=q/(10**(n-1))
        return sgn*int(val)*10.**(n-1)
    else:
        val=q/(10**n)
        return sgn*int(val)*10.**n

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

>>> x = 1.23
>>> print("%.2g" % x)
1.2
>>> x = 12.3
>>> print("%.2g" % x)
12

有关精度的详细信息,请参阅格式规范

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

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

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

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

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

你可以使用我写的这个函数,它似乎运行良好,而且非常简单!:

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

一些测试:

>>> 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

我希望这可以帮助你 ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM