2014-02-06 69 views

回答

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)) 
相關問題