2012-03-11 66 views
1

我有一个可变打印1.41069562657e-25作为1.41 * 10^-25

sr = 2*grav*mass/c**2 

它相当于1.41069562657e-25(和打印为这样)。如何以“正常”形式打印它,(1.41*10^-25)

+3

[这是公认的来自计算机或计算器的科学记号。](http://en.wikipedia.org/wiki/Scientific_Notation#E_notation)。没有什么不正常的。 – Makoto 2012-03-11 01:40:45

回答

7

你可以这样做:

>>> sr = 1.41069562657e-25 
>>> print("{:.3g}".format(sr).replace("e", "*10^")) 
1.41*10^-25 

然而,e符号在计算机浮点输出被广泛理解和接受。

+0

我知道e符号是好的,我只是认为python可能有一个更标准的方法来做到这一点。 虽然这当然完美。 谢谢 – MikeVaughan 2012-03-11 01:46:24

+0

@MikeVaughan:请注意,这不会使用像1.23这样的数字的指数表示法。 – EOL 2012-03-11 02:01:19

+0

@EOL:请注意,我在要打印的表达式周围放置了括号,以便此答案也适用于Python 3.x.我已经为你修好了。 – 2012-03-11 02:06:34

1

您也可以先单独尾数和指数:

import math 

def mant_exp(num): 
    ''' 
    Returns the mantissa and (base 10) exponent of num. 

    num -- float or int. 
    ''' 

    try: 
     exponent = math.floor(math.log10(abs(num))) 
    except ValueError: # Case of log10(0) 
     return (0, 0) # Convention: 0 = 0*10^0 
    mantissa = num/10**exponent 
    return (mantissa, int(exponent)) 

,然后使用Python的灵活的格式:

>>> sr = 1.41069562657e-25 
>>> print '{:.2f}*10^{}'.format(*mant_exp(sr)) 
1.41*10^-25 

,并得到完全控制你打印的内容。例如,您可以添加在指数前一个可选的“+”号,等

总是给你一个科学记数法的结果,即使对于像1.23号(这可能是你想要的):

>>> print '{:.2f}*10^{}'.format(*mant_exp(1.23)) 
1.23*10^0 

格雷格的答案并不总是以科学记数法打印(例如1.23),但它肯定比较简单。

+0

必须特殊情况下,我想。 – DSM 2012-03-11 02:31:55

+0

@DSM:的确如此,因为在科学记数法中没有0的唯一​​表示。我添加了0作为一个特殊情况,与传统的结果。 – EOL 2012-03-11 02:37:52

+0

对于它的价值(不多:-)),这些也会在结果中引起一些小毛病(除非计算机首先使用基10浮点数)。另一个答案中的.replace('e',...)方法将保留尽可能多的准确性。另一种可能性是使用'decimal'模块,但这是严重的矫枉过正。 – torek 2012-03-11 06:32:07