【问题标题】:How does Python determine whether to represent a number using scientific notation or not?Python 如何确定是否使用科学计数法来表示数字?
【发布时间】:2017-04-01 08:19:13
【问题描述】:

以下是在 Python 控制台中输入的一些数字,以及结果表示:

>>> 1
1
>>> 1.234
1.234
>>> 1.234e5
123400.0
>>> 1.234e15
1234000000000000.0
>>> 1.234e25
1.234e+25

...当打印相同的数字时会发生以下情况:

>>> print 1
1
>>> print 1.234
1.234
>>> print 1.234e5
123400.0
>>> print 1.234e15
1.234e+15  # different!
>>> print 1.234e25
1.234e+25

Python 如何决定使用哪种表示形式?为什么有些数字有和没有 print 会有所不同?

【问题讨论】:

    标签: python string python-2.7 floating-point repr


    【解决方案1】:

    数值只是作为值存储。 __repr__ 输出可能会根据数字的实现和类型而改变。您需要格式化数字的字符串表示形式。

    例子:

    >>> type(1e3) is type(1000.0) # float
    True
    >>> type(1e3) is type(1000)  # int
    False
    

    格式化字符串时,可以使用%g/{:g} 让它自动确定最易读的格式。使用%e/{:e} 表示明确的科学记数法。

    >>> x = 1234567
    >>> "{:.2e}".format(x)
    1.23e+06
    

    【讨论】:

    • –1 使用数字的身份比较带来了各种不相关的实现细节
    • @wim 不是重点,但我明白。这只是为了表明科学记数法仍然是一个数字。它不像一个单独的类型。不过,我会将其更改为 type
    【解决方案2】:

    在 Python 中,只有浮点数使用科学计数法表示;整数总是按原样表示。

    浮点数在 Python 2.7 中的表示方式取决于它是使用repr()(例如,直接在控制台中或作为集合的成员)还是str()(例如,使用print 语句)表示)。

    对于repr(),如果浮点数小于0.0001 (1e-4) 或至少为1e16,则使用科学计数法表示:

    >>> 1e-4
    0.0001
    >>> 0.00009999
    9.999e-05
    >>> 1e16-2
    9999999999999998.0
    >>> 10000000000000000.0
    1e+16
    

    使用str(),上限约为1e11

    >>> print 1e11-1
    99999999999.0
    >>> print 100000000000.0
    1e+11
    

    注意:在 Python 3 中,str() 现在以与 repr() 相同的方式表示浮点数。

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多