Pythonでパーセント値を印刷するにはどうすればよいですか?


183

これは私のコードです:

print str(float(1/3))+'%'

そしてそれは示しています:

0.0%

でも欲しい 33%

私に何ができる?


11
int / int = int、int / float = float、flaot / int = float
AbiusX

3
%は意味百ごと。単純な比率(この1/3場合)がある場合、パーセント値を取得するために乗算する必要がある単位あたりの値があります。整数除算と浮動小数点除算の違いについては、他の回答を参照してください。100
アパララ

FWIW、Python 3.xではprint(str(float(1/3))+'%')印刷されます0.3333333333333333%—まだ正確に印刷できるとは限りませんが、少なくとも少し近づきます。これは、そのバージョンでは除算の動作が異なるためです。
martineau

回答:


279

formatパーセント浮動小数点精度タイプをサポートします:

>>> print "{0:.0%}".format(1./3)
33%

整数除算が必要ない場合は、Python3の除算を以下からインポートできます__future__

>>> from __future__ import division
>>> 1 / 3
0.3333333333333333

# The above 33% example would could now be written without the explicit
# float conversion:
>>> print "{0:.0f}%".format(1/3 * 100)
33%

# Or even shorter using the format mini language:
>>> print "{:.0%}".format(1/3)
33%

4
あるfloat(1)よりもニシキヘビ本当に1.
Tobias Kienzler 2013

@TobiasKienzler、私はそれがもっとpythonicかどうかわかりません。少なくとも、コードを読んでいるときにつまずきます。Python 3と実際の分割では、デフォルトでこの苛立ちはなくなったと思います。
miku 2013

確かに。なぜGuidoが最初から実際の除算を実装しなかったのかと思います... 結局、1/3から0への丸めは明示的に行う必要があります...
Tobias Kienzler 2013

1
@TobiasKienzlerおそらく以前の時代には、Pythonは現在よりもCに近かったからでしょう。
glglgl 2013

14
Python 2 1.0では、float(1)またはの代わりに使用します1.。私見それは前者よりも目立たなく、後者ほど微妙ではありません。
MestreLion 2013

175

.format()formatメソッドには、より便利な「パーセント」フォーマットオプションがあります。

>>> '{:.1%}'.format(1/3.0)
'33.3%'

4
古い学校の"%.1f"フォーマットでこれを行う方法はありますか?
Yuji 'Tomita' Tomita

1
少し「不便」ですが、はい!上記のようにprint("%.1f%%" % (100 * 1.0/3))

12
100を掛ける必要がないため、これが最良の答えです。むしろ、formatパーセンテージを印刷する方法をすでに知っているという事実を利用します!
ブランバート

5
これは受け入れられる答えになるはずです。これははるかにPythonicで、組み込み機能を使用して、100倍することによる意味のない実装の詳細を排除します。
ksadowski

2
したがって、Fストリングスタイルでは、f"{1/3.0:.1%}"
クバス

66

完全を期すために、誰もこの単純なアプローチを提案していないことに気付いたので、

>>> print("%.0f%%" % (100 * 1.0/3))
33%

詳細:

  • %.0f小数点以下0桁の浮動小数点数を印刷する」ので、%.2f印刷されます33.33
  • %%リテラルを出力します%。オリジナルより少しきれい+'%'
  • 1.0代わりには、1そう何より、フロートに分裂を強制するの世話をしません0.0

1
注:100.0 * 1/
3-

@martialdidit:私はそれを知っています、それが私の答えがで括弧を持っていない理由1/3です。評価順序は意図的なものです:100.0 * 1 / 3 => 100.0 / 3 => 0.33...
MestreLion

いずれにせよ、私はから強制を移動した1001物事を明確にするために、。
MestreLion 2015

2
ご容赦ください、@ RuggeroTurra?これ、入力を文字列として表示するように変換するという広い意味でのフォーマットです。OPはの使用を決して必要.format()とせ%ず、Pythonでは文字列補間とも呼ばれる-formatting が完全に有効な代替手段であることに注意してください。
MestreLion 2018年

%を使用すると、フロートを文字列にフォーマットします。パーセンテージ文字列へのフロートではありません。100による乗算は、%ではなく手動で行われます。フォーマットのみを使用する唯一の正しい解決策は{:.0%}によるものだと思います
Ruggero Turra '21

38

整数を除算してから浮動小数点に変換しています。代わりに浮動小数点数で除算します。

おまけとして、ここで説明されている素晴らしい文字列フォーマット方法を使用してください:http : //docs.python.org/library/string.html#format-specification-mini-language

パーセント変換と精度を指定します。

>>> float(1) / float(3)
[Out] 0.33333333333333331

>>> 1.0/3.0
[Out] 0.33333333333333331

>>> '{0:.0%}'.format(1.0/3.0) # use string formatting to specify precision
[Out] '33%'

>>> '{percent:.2%}'.format(percent=1.0/3.0)
[Out] '33.33%'

素晴らしい逸品!


18

Python 3 f-stringソリューションを追加するだけ

prob = 1.0/3.0
print(f"{prob:.0%}")

4

次に、代わりにこれを実行する必要があります。

print str(int(1.0/3.0*100))+'%'

.0山車としてそれらを示し、int()その後、再び整数にそれらを丸めます。


これは2011年からのものだと知っていますが... int()は丸めません。例えばint(1.9) != 2。これと同様に行うことができます丸め-round(1.9,0) == 2
所有

int()確かに数値は切り捨てます。私の例は、私が意図したとおりに動作します。OPが望んでいたので、桁を切り捨てます。
Morten Kristensen

Stockoverflowは素晴らしいです-数年とまだ応答。ありがとうございました。ただし、完全を期すために、明確にしたいと思います。int()数字を削除します。切り捨ては行いません。丸めは、数字で何かを行うことを意味します。最終結果は同じです。その意味で、私はあなたの主張を理解しています。また、OPは数字で何をしたいのかを明確にしていません。33.333...は33に丸められます。私のコメントに返信していただきありがとうございます。
所有
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.