Python如何确定是否使用科学记数法表示数字?

时间:2016-11-17 17:01:08

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

以下是在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有所区别?

2 个答案:

答案 0 :(得分:4)

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

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

使用repr()时,如果浮点数小于0.00011e-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()相同的方式表示浮点数。

答案 1 :(得分:2)

数值只是存储为值。 __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