распечатать 1.41069562657e-25 как 1.41 * 10 ^ -25 - PullRequest
1 голос
/ 11 марта 2012

У меня есть переменная

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

Это равно 1.41069562657e-25 (и печатается как таковое). Как мне распечатать его в «нормальном» виде, (1.41*10^-25)?

Ответы [ 2 ]

7 голосов
/ 11 марта 2012

Вы можете сделать это:

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

Однако, нотация e в компьютерном выводе с плавающей точкой широко понята и принята.

1 голос
/ 11 марта 2012

Вы также можете сначала разделить мантиссу и экспоненту:

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), но он, безусловно, проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...