Как заставить экспоненциальное число печатать с ведущей точкой в ​​python?

Я пытаюсь напечатать экспоненциальное число в python, но мне нужно, чтобы мой номер начинался с точки. Что-то вроде :

>>>print( "{:+???}".format(1.2345678) )
+.1234e+01

person Sigmun    schedule 06.02.2014    source источник
comment
stackoverflow.com/questions/13031636/   -  person G M    schedule 06.02.2014


Ответы (3)


Если вы умножите свое число на 10 и отформатируете число в научной записи, у вас будет правильный показатель степени, но запятая будет неуместна. К счастью, вы знаете, что для знака ровно один символ и ровно одна цифра перед запятой. Так что вы можете сделать

def format_exponential_with_leading_dot(n):
    a = "{:+e}".format(n * 10)
    return a[0] + '.' + a[1] + a[3:]


>>> print format_exponential_with_leading_dot(1.2345678)
+.1234568e+01
person Rems    schedule 06.02.2014

Вот невероятно отвратительный способ сделать это:

import numpy as np
num = 1.2345678
print str(num/10**(int(np.log10(num))+1)).lstrip('0')+'e{0}'.format(str((int(np.log10(num))+1)).zfill(2))

>>>.123456768e01

Вот лучший способ (я думаю):

import re
num = 1.2345678
m_ = re.search('([0-9]*)[.]([0-9]*)', str(num))
print('.{0}e+{1}'.format(m_.group(1)+m_.group(2), str(len(m_.group(1))).zfill(2)))

>>>.123456768e+01

Если вы преобразуете любую выходную строку с помощью:

float(output_string)

вы получаете исходный номер.

person rabs    schedule 06.02.2014
comment
Вы также можете использовать стандартную библиотеку math.log10() вместо numpy. - person Brendan Abel; 06.02.2014

Работает с отрицательными числами и может использовать отрицательные показатели

import math
num = -0.002342
print '{}.{}e{}{}'.format('+' if num >= 0 else '-', str(abs(num)).replace('.','').lstrip('0'), '+' if abs(num) >= 1 else '-', str(abs(int(math.log10(abs(num)) + (1 if abs(num) > 1 else 0)))).zfill(2))
person Brendan Abel    schedule 06.02.2014