2017-08-24 32 views
-3

我有一個函數可以從整數中去除尾隨小數位並將其轉換爲字符串。例如trim(1.0)輸出'1'。修整任意數量的零

這是我的代碼:

def trim(num): 
    num1 = str(num) 
    try: 
     if '.0' in num1: 
      return num1[:num1:rfind('.0')] 
     return num1 
    except Exception: 
     pass 

雖然這需要護理的人數與1個尾隨小數完美,它不會有更多的小數位(如2.000)工作。有沒有辦法修剪所有的尾隨小數位?

+2

你的問題沒有意義。 2.000與2.0相同。你談論「從整數後面跟隨小數位」,但整數沒有小數位。 – wim

+0

有沒有這樣的設施與內部表示。可變小數位僅存在於字符串表示中,例如打印該值時。這是一個字符串格式化的問題,您可以通過簡單的搜索找到它。 – Prune

回答

1

首先,你的代碼有問題。如果我把你的代碼並運行此:

print(your_trim(1.1)) 
print(your_trim(1.0566)) 
print(your_trim('1cm')) 

輸出是:

1.1 
1 <-- this is dangerous, the value is 1.0566! 
1cm <-- this is not even a number 

正如評論者提到的,你可能會不匹配浮點數和整數。顧名思義,integer沒有小數位。如果你的目標IST剝去尾隨零(無論何種原因),並一輪floatint,你可能會使用這樣的方法:

def strip_trailing_zeroes(num): 
    if isinstance(num, float): 
     if int(num) == num: 
      return int(num) 
     else: 
      return num 
    else: 
     raise ValueError("Parameter is not a float") 

測試代碼:

print(strip_trailing_zeroes(1.1)) 
print(strip_trailing_zeroes(1.0566)) 
print(strip_trailing_zeroes(1.000)) 
print(strip_trailing_zeroes('1cm')) 

返回輸出:

1.1 
1.0566 
1 
Exception with "ValueError: Parameter is not a float" 

正如其他評論者所說,我無法想象這是一個用例。

你可能可能後,是從一個「浮動的字符串表示」修剪尾隨零。爲此,一個簡單的正則表達式替換就足夠了:

# match a decimal point, followed by one or more zeros 
# followed by the end of the input 
print(re.sub('\.0+$', '', '2.000'))