2016-11-17 28 views
1

這裏是在Python控制檯中輸入一些數字,得到的表示: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有區別?

回答

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()現在用與相同的方式表示浮點數。

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

-1使用身份數字比較將各種不相關的實現細節帶入混合 – wim

+0

@wim不是真正的重點,但我明白。這只是爲了表明科學記數法仍然是一個數字。它不像一個單獨的類型。不過,我會把它改成'type'。 – Goodies