Как избежать печати научной нотации на python без добавления дополнительных цифр? - PullRequest
5 голосов
/ 20 июня 2011

В этом вопросе задается вопрос о том, как подавить научную нотацию в python.

У меня есть ряд чисел для отображения - малые степени 10 - и я хотел бы отобразить ихбез конечных нулей.Т.е. 0,1, 0,01 и т. Д. До 0,000001

Если я сделаю "%s" % 10 ** -6, я получу '1e-06'.Если я использую "%f" % 10 ** -6, я получаю '0.000001', что мне нужно.

Однако "%f" % 10 ** -3 дает '0.001000', что нарушает ограничение "без конечных нулей".

Это нетрудно обойти это (замена регулярных выражений или что-то в этом роде), но мне интересно, есть ли какая-то магия строк формата, которую я пропускаю.

Ответы [ 2 ]

7 голосов
/ 20 июня 2011

Мне кажется, это немного странно, но вы можете использовать str.rstrip("0"), чтобы избавиться от конечных нулей:

>>> "{:f}".format(10**-6).rstrip("0")
'0.000001'
>>> "{:f}".format(10**-3).rstrip("0")
'0.001'

Редактировать: Как сказано в комментариях, есть лучший способ для этого:

>>> format(1e-6, 'f').rstrip('0')
'0.000001'
>>> format(1e-3, 'f').rstrip('0')
'0.001'
2 голосов
/ 21 марта 2014

Простой rstrip("0") плохо обрабатывает малые и некоторые другие значения, он должен оставлять один ноль после десятичной точки - 0.0 вместо 0.:

def format_float(value, precision=-1):
    if precision < 0:
        f = "%f" % value
    else:
        f = "%.*f" % (precision, value)

    p = f.partition(".")

    s = "".join((p[0], p[1], p[2][0], p[2][1:].rstrip("0")))

    return s

print(format_float(3e-10))
print(format_float(3e-10, 20))
print(format_float(1.5e-6))
print(format_float(1.5e+6))
...