파이썬에서 백분율 값을 인쇄하는 방법은 무엇입니까?


183

이것은 내 코드입니다.

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

그리고 그것은 보여줍니다 :

0.0%

그러나 나는 얻고 싶다 33%

어떡해?


11
int / int = int, int / float = float, flaot / int = float
AbiusX

3
백분율백을 의미 합니다. 당신이 (단순 비율이있는 경우 1/3귀하의 경우)을, 당신은이 단위 로 곱해야 값 100얻을 %의 값입니다. 정수와 부동 소수점의 차이에 대한 다른 답변을 참조하십시오.
Apalala

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

@ TobiasKienzler, 더 파이썬인지 모르겠습니다. 적어도 코드를 읽는 동안 걸려 넘어지는 것입니다. 나는 파이썬 3과 기본적으로 실수 로이 자극이 사라 졌다고 생각합니다.
miku

과연. Guido가 왜 처음부터 실제 분할을 구현하지 않았는지 궁금합니다 ... 1/3에서 0으로 반올림하는 것은 결국 명시 적 이어야 합니다 ...
Tobias Kienzler

1
@TobiasKienzler 아마도 초기에는 파이썬이 오늘날보다 C에 더 가깝기 때문일 것입니다.
glglgl

14
파이썬 2에서는 또는 1.0대신에 사용 합니다 . IMHO 그것은 전자보다 덜 눈에 띄지 않으며 후자만큼 미묘하지 않습니다. float(1)1.
MestreLion

175

형식화 방법에보다 편리한 '퍼센트'형식화 옵션이 있습니다 .format().

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

4
오래된 학교 "%.1f"형식 으로이 작업을 수행 할 수 있습니까?
Yuji 'Tomita'Tomita

1
조금 "편리하지 않다", 그러나 그렇습니다! 위에서 제안한 것처럼print("%.1f%%" % (100 * 1.0/3))

12
이것은 100으로 곱할 필요가 없기 때문에 가장 좋은 대답입니다. 오히려 format백분율을 인쇄하는 방법을 이미 알고 있다는 사실을 이용합니다 !
blambert

5
이것이 정답입니다. 이것은 내장 기능을 사용하여 100으로 곱하는 의미없는 구현 세부 사항을 제거함으로써 훨씬 더 파이썬입니다.
ksadowski

2
그래서 f- 문자열 스타일에서f"{1/3.0:.1%}"
Kubas

66

내가이 간단한 접근법을 제안한 사람은 아무도 없었기 때문에 완전성을 위해서만 :

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

세부:

  • %.0f" 소수점 0으로 플로트 인쇄 " 를 나타내 므로 %.2f인쇄33.33
  • %%리터럴을 인쇄합니다 %. 원본보다 약간 더 깨끗합니다+'%'
  • 1.01디비전이 플로트되도록 강제하는 대신에 더 이상0.0

1
참고 : 100.0 * 1/3-> 확인, 100.0 * (1/3)-> 0.0 확인 안 됨
mpgn

@ martialdidit : 나는 그것을 알고 있습니다. 그래서 내 대답에 괄호 가 없습니다1/3 . 평가 순서는 의도적입니다.100.0 * 1 / 3 => 100.0 / 3 => 0.33...
MestreLion

어떤 경우에는, 나는에서 강제 이동 한 100받는 사람을 1일을 명확하게하기 위해.
MestreLion

2
@RuggeroTurra? 이 되고 그것은 그 넓은 의미에서, 포맷 변환 하는 문자열로서 표시하기위한 입력을. 방공호의 사용을 필요하지 않습니다 유의하시기 바랍니다 .format(), 그리고 %-formatting라고도 문자열 보간 파이썬에서, 완벽하게 유효한 대안이다.
MestreLion

%를 사용하면 부동 소수점을 문자열로 형식화합니다. 백분율 문자열로 부동하지 않습니다. 100의 곱셈은 %가 아닌 손으로 이루어집니다. 난 단지 형식을 사용하는 유일한 올바른 해결책으로 생각 {: 0.0 %}
루 제로 Turra

38

정수를 나눈 다음 float로 변환합니다. 대신 수레로 나눕니다.

보너스로 여기에 설명 된 멋진 문자열 형식화 방법을 사용하십시오 : 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

비축은 훌륭합니다 – 2 년이 지나도 여전히 반응합니다. 감사합니다. 그러나 완전성을 기하기 위해 명확히하고 싶습니다. int()숫자를 삭제합니다. 반올림하지 않습니다. 반올림은 숫자와 관련이 있음을 의미합니다. 최종 결과는 동일합니다. 그런 의미에서 당신의 요점을 봅니다. 또한, OP는 33.333을 가진 숫자로 무엇을하고 싶은지 명확하지 않습니다. 33으로 반올림합니다. 내 의견에 답해 주셔서 감사합니다.
소유
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.