2014-03-27 54 views
1

我想在Python中有一個函數,可以處理從非常大到非常小,甚至大數小數部分的小數部分的各種數字(請參閱下面的代碼)。我需要將數字轉換爲字符串,並刪除它可能具有的任何科學記號。我還需要刪除小數點後面的零。這是迄今爲止我最接近的解決方案,它適用於大多數數字,但並非如你所見。Python的任何數字非科學字符串

支持麻煩的數字有什麼改進嗎?

def number2string(a): 
    b = '{0:.15f}'.format(a) 
    b = b.rstrip('0') # remove trailing zeros right of decimal 
    b = b.rstrip('.') # remove trailing decimal if exists 
    print a,"->",b 

number2string(3) 
number2string(3.14) 
number2string(3.14E+12) 
number2string(3.14e-7) 
number2string(1234567.007) 
number2string(123456789) 
number2string(.00000000000000123) 

結果:

3 -> 3 
3.14 -> 3.14 
3.14e+12 -> 3140000000000 
3.14e-07 -> 0.000000314 
1234567.007 -> 1234567.006999999983236 
123456789-> 123456789
1.23e-15 -> 0.000000000000001 
+0

你是否看了十進制模塊? – wwii

+0

我試過了,但我看不到如何應用它並解決上述問題 – panofish

+0

哪個麻煩的號碼不能用於您的功能? – wwii

回答

7
from decimal import Decimal 

def number2string(a): 
    b = format(Decimal(str(a)).normalize(), 'f') 
    print a,"->",b 
+0

我不明白的代碼,但WOW ....完美的作品。令我驚訝的是,原始問題存在於python中,但幸好,我知道python中會有解決方案......感謝Yuriy Kovalev! – panofish

相關問題