2017-08-24 6 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には小数点以下桁がありません。

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')) 

あなたの目標イストはとないラウンド(何らかの理由で)floatintに末尾のゼロを取り除くためにする場合は、このアプローチのようなものを使用する場合があります出力を返します。

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')) 
関連する問題