8 ответов:
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))+'%'The
.0обозначает их как поплавки иint()округляет их до целых чисел, затем снова.
Как насчет чего-то вроде этого:
print str( round( float(1.0/3.0) * 100 ) )[:2] + '%'этот [: 2] бит будет отрезать .0 от результата.
Comments