0

我有一系列需要以特定格式打印出來的浮點數,與科學記數法非常相似。 給定數字-345.678,科學記數法會給我-3.45678E2,但是我需要輸出-.345678D03。具體來說,我不能在小數點左邊有任何數字。有沒有辦法在Python 3中做到這一點?Python:某種科學記數法

回答

0

我不知道你的格式的全部細節,但下面應該工作或輕易修改的工作:

from decimal import Decimal 

def sci_str(dec): 
    return ('{:.' + str(len(dec.normalize().as_tuple().digits) - 1) + 'E}').format(dec) 

def mod_sci_str(x): 
    s = sci_str(10*Decimal(str(x))) 
    s = s.replace('E+','D0') 
    s = s.replace('E-','D0-') 
    s = s.replace('.','') 
    if s.startswith('-'): 
     return '-.' + s[1:] 
    else: 
     return '.' + s 

功能sci_str是一個聰明的工具,由於@MikeM在這問題

例如:

>>> mod_sci_str(-345.678) 
'-.345678D03' 
>>> mod_sci_str(345.678) 
'.345678D03' 
>>> mod_sci_str(0.0034) 
'.34D0-2'