2014-02-06 3 views
4

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

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

http://stackoverflow.com/questions/13031636/string-format-start-scientific-notation-with-0-for-positive-number-with-fo –

ответ

1

Если умножить свой номер на 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 
1

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

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) 

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

+0

Вы также можете использовать стандартная библиотека 'math.log10()' вместо numpy. –

0

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

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))