это мой код:
print str(float(1/3))+'%'
и это показывает:
0.0%
но я хочу получить 33%
Что я могу сделать?
python
python-2.x
zjm1126
источник
источник
1/3
в вашем случае), у вас есть значение на единицу, которое нужно умножить на,100
чтобы получить процентное значение. Посмотрите другие ответы для разницы между целочисленным и делением числа.print(str(float(1/3))+'%')
напечатает0.3333333333333333%
- все еще не совсем то, что вы хотите, но, по крайней мере, это немного ближе. Это потому, что деление работает по-разному в этой версии.Ответы:
format
поддерживает процент точности с плавающей точкой :Если вам не нужно целочисленное деление, вы можете импортировать деление Python3 из
__future__
:источник
float(1)
ли более питонна, чем1.
?1.0
вместоfloat(1)
или1.
. ИМХО, это менее навязчиво, чем первое, и не так тонко, как второе.Существует более удобный способ форматирования в процентах для
.format()
метода форматирования:источник
"%.1f"
форматированием старой школы ?print("%.1f%%" % (100 * 1.0/3))
format
уже знает, как печатать проценты!f"{1/3.0:.1%}"
Просто ради полноты, так как я заметил, никто не предложил этот простой подход:
Подробности:
%.0f
означает « печать поплавок с 0 знаков после запятой », так%.2f
что печать33.33
%%
печатает буквальное%
. Немного чище, чем ваш оригинал+'%'
1.0
вместо того, чтобы1
позаботиться о том, чтобы заставить дивизию плавать, так что не более0.0
источник
1/3
. Порядок оценки является преднамеренным:100.0 * 1 / 3 => 100.0 / 3 => 0.33...
100
того1
, чтобы прояснить ситуацию..format()
, и%
-форматирование, также известное как интерполяция строк в Python, является вполне допустимой альтернативой.Вы делите целые числа, а затем конвертируете в число с плавающей точкой. Вместо этого делите на поплавки.
В качестве бонуса используйте удивительные методы форматирования строк, описанные здесь: http://docs.python.org/library/string.html#format-specification-mini-language
Чтобы указать процент преобразования и точность.
Отличная жемчужина!
источник
Просто чтобы добавить решение Python 3 f-string
источник
Тогда вы захотите сделать это вместо:
.0
Обозначает их как поплавки иint()
потом снова раунды , чтобы они целые числа.источник
int()
не округляется. напримерint(1.9) != 2
. Округление может быть сделано так -round(1.9,0) == 2
int()
конечно же округляет число. Мой пример делает именно то, что я хотел сделать; отрезать цифры, так как это то, что хотел ОП.int()
опускает цифры. Это не округляется. Округление подразумевает, что оно что-то делает с цифрами. Конечный результат все тот же; в этом смысле я понимаю вашу точку зрения. Кроме того, ОП не разъясняет, что он / она хочет сделать с цифрами, имеет 33,333 ... делает округление до 33. Спасибо за ответ на мой комментарий и хорошего дня!