2016-11-23 4 views
3

私はグーグルではありますが、これに適切な答えが見つかりませんでした。整数ではない場合にのみ小数点を表示する方法は?

浮動小数点数があり、その平均値を取得したとします。

3.5 
2.5 
5 
7 

だから我々は4つの数字(もうリストに含まれていない)を持っている:彼らの平均値は、このようなものです。小数点2桁の2つの数字。

私がしたいことは、これらの数字を印刷して、このように保つことです。私の問題は、%.1fを使用すると、5と7から5.0と7.0になりますが、のままにしておきたいので、としてください。

そうですね、そのままそのまま印刷したいのですが、どうすればいいのか分かりません。フロートは整数にdecimalポイントを追加します。それらをintに変換すると、必要な小数点が削除されます。

どちらのオプションも私が望むものではありません。

誰かが正しい方向に向かうことができますか?

編集:関連するコード、尋ねて:

# I have a list of numbers and I am calculating their average and rounding them first. 
get_numbers = map(float, line[-1]) 
average_numbers = sum(get_numbers)/len(get_numbers) 
rounded_numbers= round(average_numbers * 2)/2 

# So now, I've got the numbers: 3.5, 2.5, 5, 7 

print "The numbers are: %.1f" % (rounded_numbers) 
+0

を明確にしてください – MMF

+0

整数にそれらをキャストします - あなたの4つの数字は実際には '浮動小数点、浮動小数点、整数、整数'ですか、それともすべて浮動小数点ですか?あなたの入力が実際にintであれば 'is_integer'解決法は機能しません。また、すべての入力が実際に浮動小数点である場合は' format'解決法は機能しません。 –

+0

彼らはすべて浮きです。それらのうちのいくつかは丸められたもの、ないものもあります。 – Siyah

答えて

8

あなたは山車is_integerメソッドを使用することができます。 (それはフォームX.0であれば、他の言葉で)フロートが整数として表すことができる場合はTrueを返す:

li = [3.5, 2.5, 5.0, 7.0] 

print([int(num) if float(num).is_integer() else num for num in li]) 
>> [3.5, 2.5, 5, 7] 

EDIT

OPは、それらのコードを追加した後:

上記の元の例のようにリストの解説を使用する代わりに、計算された平均と同じロジックを使用する必要があります。

get_numbers = map(float, line[-1]) # assuming line[-1] is a list of numbers 
average_numbers = sum(get_numbers)/len(get_numbers) 
average = round(average_numbers * 2)/2 
average = int(average) if float(average).is_integer() else average 
print average # this for example will print 3 if the average is 3.0 or 
       # the actual float representation. 
+0

OPからのデータを使用すると、 "intオブジェクトに属性がありませんis_integer '"というエラーがスローされます。冗長ではあるが、 'num.is_integer()'を 'float(num).is_integer()'に変更することもできますか? –

+0

@ScottMermelstein私はOP入力がすべて浮動小数点であると信じています。そうでなければ、最初はこの問題はありませんでしたが、 'float(...) 'を安全面に追加します。 – DeepSpace

+0

正直言って、私はあなたが正しいと信じています。フロートの変換は必要ありません。しかし、それはあなたがエラーを得ることができないので、それを追加していただきありがとうございます。 :-) –

0

技術的には、浮動小数点数を持ち、その平均値を取得した場合、浮動小数点数を戻すべきです。あなたがちょうどそれらを印刷したい場合でも、次はうまく動作するはずです:

前の回答と同様に
print('{} {} {} {}'.format(3.5, 2.5, 5, 7)) 
0

[int(i) if int(i) == i else i for i in li] 

または:

[int(i) if not i % 1 else i for i in li] 
関連する問題