2017-04-10 282 views
0

我有2個字符串即處理小數位數/避免科學記數法的Python

string1 = '1000000000.0' 
string2 = '1000000000.09' 
from decimal import Decimal 
Decimal(string1).normalize() 

Decimal('1E+9') 

Decimal(string2).normalize() 

Decimal('1000000000.09') 

我真的想像上面那樣。

那麼string1如何可以作爲十進制(1000000000),而不是十進制('1E + 9') 和string2作爲十進制('1000000000.09'),我現在進入。

回答

0

這個功能做的伎倆

def DecimalHandler(string): 

if re.match('^\d*[.]?\d*$',string): 

    Frst = string.split('.')[0] 
    try: 
     secnd = string.split('.')[1] 

     secnd = re.sub('[0]+$','',secnd) 
     if secnd != '' : 
      secnd = '.'+secnd 
     else: 
      secnd = secnd 

    except IndexError: 
     secnd = '' 


    OutPut_Str = Frst+secnd 
else: 
    print("...") 
    OutPut_Str = string 

return(OutPut_Str) 
0

您可能想要使用字符串格式。這使得您可以非常密切地控制數據的表示方式 - 請參閱documentation on str.format以獲得完整(對於初學者來說有點複雜)的解釋。

爲了回答您的具體要求:

from decimal import Decimal 

string1 = '1000000000.0' 
string2 = '1000000000.09' 
fstr = '{:10.0f} {:12.2f}' 

print(fstr.format(Decimal(string1), Decimal(string2))) 

你應該找到輸出

1000000000 1000000000.09 

爲了讓你的輸出更容易被人理解,你可能想改變fstr'{:10,.0f} {:12,.2f}' - 的逗號表示整數部分將被分成逗號分隔的三個組,並且您應該看到輸出

1,000,000,000 1,000,000,000.09 
+0

有沒有一種方法,而不是硬編碼格式爲.2f, 在「1000000000.9」案例會給「1000000000.90」,但我希望它是 「1000000000.9」只,謝謝 –

+0

無法想象一種只用字符串格式化的方法,但'1000000000.90'.rstrip('0')'計算爲「1000000000.9」。不幸的是,如果沒有重要的小數位,你會看到「1000000000.」,這可能不是你想要的。數字格式化並不像看起來那麼容易... – holdenweb

+0

有沒有可能將'1E + 9'擴展到1000000000的功能, 這可能會訣竅, –