---人生苦短,我用Python---
這道題乍一看挺簡單,但是仔細一想,python提供了三種浮點值:內置的float與complex類型,以及標准庫的decimal.Decimal類型。
float類型存放雙精度的浮點數,具體取值范圍依賴於構建python的c編譯器,由於精度受限,進行相等性比較不可靠。
若是小數,要保證輸出的小數精度和原字符串精度一致,使用decimal類型進行操作則可滿足要求。
代碼如下:
from decimal import * # 引入decimal模塊,控制浮點數精度
def change(str):
getcontext().prec = 100 # 這里可自由設置浮點數精度,默認是28位,可以設置更高
l = str.split('.') # 將字符串以小數點分割存入數組
if len(l) == 1: # 只有一個元素時,說明是整數
num = int(l[0])
if len(l) == 2: # 有兩個元素時為小數, l[0]為整數部分,l[1]為小數部分
num = Decimal(l[0]) + Decimal(l[1])/Decimal(10 ** len(l[1])) #分別將兩部分轉化為數字類型再相加
return num
# 將以下字符串,傳入上面的函數進行轉換
str1 = '38.3385454457378347589723958920438609248509'
str2 = '12687'
num1 = change(str1)
num2 = change(str2)
print(num1) # 輸出為38.3385454457378347589723958920438609248509
print(num2) # 輸出為12678