это мой код:
print str(float(1/3))+'%'
и он показывает:
0.0%
но я хочу получить 33%
что я могу сделать.
это мой код:
print str(float(1/3))+'%'
и он показывает:
0.0%
но я хочу получить 33%
что я могу сделать.
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%
Существует более удобный вариант "процента" форматирования для метода формата .format()
:
>>> '{:.1%}'.format(1/3.0)
'33.3%'
Просто ради полноты, так как я заметил, что никто не предложил этот простой подход:
>>> print("%.0f%%" % (100 * 1.0/3))
33%
Детали:
%.0f
расшифровывается как "печатать плавающее число с 0 десятичными разрядами", поэтому %.2f
будет печатать 33.33
%%
печатает литерал %
. Чуть чище, чем ваш оригинал +'%'
1.0
вместо 1
заботится о том, чтобы заставить дивизию плавать, так что не более 0.0
Вы делите целые числа, а затем конвертируете в 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%'
Отличный камень!
Затем вы захотите сделать это вместо:
print str(int(1.0/3.0*100))+'%'
.0
обозначает их как float, а int()
снова округляет их до целых чисел.
Просто чтобы добавить решение Python 3 f-string
prob = 1.0/3.0
print(f"{prob:.0%}")
Просто поставьте так:
print '%.2f%%' % 24.689 # Double percentage sign
Как насчет чего-то вроде этого:
print str( round( float(1.0/3.0) * 100 ) )[:2] + '%'
Этот бит [: 2] срежет 0. из результата.
Вот как я это сделал:
п = 1,0/3
напечатать "%.0f"% (100 * n) + r "%"
[Выход] 33%