【问题标题】:In laymans terms, what does the Python string format "g" actually mean?通俗地说,Python 字符串格式“g”实际上是什么意思?
【发布时间】:2012-01-07 02:27:51
【问题描述】:

我觉得问我确定是一个相当基本的问题有点傻,但我一直在学习 Python,但我很难理解“g”和“G”字符串格式到底是做什么的。

文档有这样的说法:

浮点格式。如果指数小于 -4 或不小于精度,则使用小写的指数格式,否则使用十进制格式。

我确信这应该是有道理的,但我就是不明白。有人可以为这种格式提供更清晰的解释,并可能提供一些关于何时以及如何使用它的示例,而不是仅使用“e”或“f”。

谢谢

【问题讨论】:

  • 您是否尝试过以十进制输出一堆样本数字并使用%g 格式化?这可能会给你一个好主意...
  • 历史记录:虽然 Python 从 C 的 printf 借用了这些格式代码,但它们的基本思想和具体代码(“F”、“E”和“G”)首先被使用在 1950 年代末和 60 年代的各种 FORTRAN 实现中。

标签: python floating-point number-formatting exponent


【解决方案1】:

g 和 G 类似于您在计算器显示屏上获得的输出,如果输出非常大或非常小,您将得到科学计数法的响应。例如 0.000001 用 g 表示“1e-06”,用 G 表示“1E-06”。但是,不太小或太大的数字仅显示为小数 1000 给出“1000”

e 总是以指数格式给出结果 1000 给出 1.000000e+03

f 总是以十进制格式给出结果,但是它不会像 g 和 G do 1000 那样四舍五入给出“1000.000000”

【讨论】:

    【解决方案2】:

    这些例子可能只是说明性的:

    >>> numbers = [100, 10, 1, 0.1, 0.01, 0.001, 0.0001, 0.00001]
    >>> for number in numbers:
    ...     print "%%e=%e, %%f=%f, %%g=%g" % (number, number, number)
    ... 
    %e=1.000000e+02, %f=100.000000, %g=100
    %e=1.000000e+01, %f=10.000000, %g=10
    %e=1.000000e+00, %f=1.000000, %g=1
    %e=1.000000e-01, %f=0.100000, %g=0.1
    %e=1.000000e-02, %f=0.010000, %g=0.01
    %e=1.000000e-03, %f=0.001000, %g=0.001
    %e=1.000000e-04, %f=0.000100, %g=0.0001
    %e=1.000000e-05, %f=0.000010, %g=1e-05
    >>> for number in numbers:
    ...     print "%%0.2e=%0.2e, %%0.2f=%0.2f, %%0.2g=%0.2g" % (number, number, number)
    ... 
    %0.2e=1.00e+02, %0.2f=100.00, %0.2g=1e+02
    %0.2e=1.00e+01, %0.2f=10.00, %0.2g=10
    %0.2e=1.00e+00, %0.2f=1.00, %0.2g=1
    %0.2e=1.00e-01, %0.2f=0.10, %0.2g=0.1
    %0.2e=1.00e-02, %0.2f=0.01, %0.2g=0.01
    %0.2e=1.00e-03, %0.2f=0.00, %0.2g=0.001
    %0.2e=1.00e-04, %0.2f=0.00, %0.2g=0.0001
    %0.2e=1.00e-05, %0.2f=0.00, %0.2g=1e-05
    

    Python 的优点之一是当您不完全理解它的含义时,很容易在解释器中测试它。

    【讨论】:

    • 在阅读您的评论多一点之后,我玩弄并重新阅读了上面的解释。那么,如果数字大于10**(precision)(默认精度为 6,但可以使用格式中的.n 更改)或小于10**-4,'%g' 将显示为指数?如果是这样的话,那么当我阅读文档中的解释时,我真的很密集,尽管我承认我认为我的解释更清楚一些。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 2013-11-06
    • 2018-08-28
    • 2010-11-03
    • 2012-01-05
    • 2022-04-08
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多