【问题标题】:Fixed number of digits for size regardless of case/unit无论大小写/单位,固定位数的大小
【发布时间】:2021-12-30 01:58:56
【问题描述】:

我有以下代码:

def format_sizeof(num, suffix='', divisor=1000):
    """
    Formats a number (greater than unity) with SI Order of Magnitude
    prefixes.
    Parameters
    ----------
    num  : float
        Number ( >= 1) to format.
    suffix  : str, optional
        Post-postfix [default: ''].
    divisor  : float, optional
        Divisor between prefixes [default: 1000].
    Returns
    -------
    out  : str
        Number with Order of Magnitude SI unit postfix.
    """
    for unit in ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z']:
        if abs(num) < 999.5:
            if abs(num) < 99.95:
                if abs(num) < 9.995:
                    return '{0:1.2f}'.format(num) + unit + suffix
                return '{0:2.1f}'.format(num) + unit + suffix
            return '{0:3.0f}'.format(num) + unit + suffix
        num /= divisor
    return '{0:3.1f}Y'.format(num) + suffix

我要做的是对其进行调整,使其始终打印相同数量的数字,无论大小写/单位如何,同时仍保持人类可读性。

这是为了确保每次终端刷新时都打印相同的宽度。

我遇到了几种方法,填充、字符串类型转换、math.log10。

我不确定解决这个问题的最佳方法是什么。

提前致谢。

【问题讨论】:

    标签: python math


    【解决方案1】:

    来自the documentation on string formatting

    width 是定义最小总字段宽度的十进制整数, 包括任何前缀、分隔符和其他格式字符。 如果未指定,则字段宽度将由 内容。

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

    换句话说,对于'g' 的浮点数,width 给出最小字符数,包括数字和小数点,precision 给出最大值位数。

    width 是格式字符串中点之前的数字。 precision 是格式字符串中点后面的数字。

    这是一个 precision 为 5(最多 5 位)和 width 为 6(最少 5 位 + 1 个小数点)的示例:

    >>> '{:6.5g}'.format(123.4567)
    '123.46'
    >>> '{:6.5g}'.format(12.34567)
    '12.346'
    >>> '{:6.5g}'.format(12.1)
    '  12.1'
    >>> '{:6.5g}'.format(12.0)
    '    12'
    

    【讨论】:

      【解决方案2】:

      如果您想使用n 数字打印一个数字(并且您确定不需要超过n):

      from math import log10
      
      x = 42
      n = 5
      print(format(x, f'{n}.{n-1-int(log10(x))}f'))
      

      结果:

      42.000
      

      log10 与其他数学函数是分开的,因此进行了相当优化,尽管由于您只对它的整数部分感兴趣,因此您可能还可以更快一些。

      【讨论】:

        猜你喜欢
        • 2011-04-16
        • 1970-01-01
        • 2013-11-09
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        相关资源
        最近更新 更多