to jest mój kod:
print str(float(1/3))+'%'
i to pokazuje:
0.0%
ale chcę dostać 33%
Co mogę zrobić?
python
python-2.x
zjm1126
źródło
źródło
1/3
w twoim przypadku), masz wartość na jednostkę, która musi ją pomnożyć,100
aby uzyskać wartość procentową . Zobacz inne odpowiedzi na temat różnicy między dzieleniem całkowitym a zmiennoprzecinkowym.print(str(float(1/3))+'%')
wydrukuje0.3333333333333333%
- wciąż nie dokładnie to, czego chcesz, ale przynajmniej jest trochę bliżej. Jest tak, ponieważ podział działa w tej wersji inaczej.Odpowiedzi:
format
obsługuje procentowy typ precyzji zmiennoprzecinkowej :Jeśli nie chcesz podziału na liczby całkowite, możesz zaimportować podział na Python3 z
__future__
:źródło
float(1)
naprawdę jest bardziej pytoniczny niż1.
?1.0
zamiastfloat(1)
lub1.
. IMHO jest mniej natarczywy niż pierwszy i nie tak subtelny jak drugi.Istnieje znacznie wygodniejsza opcja formatowania procentowego dla
.format()
metody formatowania:źródło
"%.1f"
formatowania oldschoolowego?print("%.1f%%" % (100 * 1.0/3))
format
już wie, jak drukować procenty!f"{1/3.0:.1%}"
Ze względu na kompletność, ponieważ zauważyłem, że nikt nie zasugerował tego prostego podejścia:
Detale:
%.0f
oznacza „ wydrukuj liczbę zmiennoprzecinkową z 0 miejscami po przecinku ”, więc%.2f
wydrukuje33.33
%%
drukuje literał%
. Trochę czystszy niż twój oryginał+'%'
1.0
zamiast1
zajmować się zmuszaniem dywizji do wypłynięcia, więc nie więcej0.0
źródło
1/3
. Kolejność oceny jest celowa:100.0 * 1 / 3 => 100.0 / 3 => 0.33...
100
do1
, aby wszystko było jasne..format()
i%
formatowania, znanego również jako interpolacja łańcuchów w Pythonie, jest całkowicie poprawną alternatywą.Dzielisz liczby całkowite, a następnie konwertujesz na liczbę zmiennoprzecinkową. Zamiast tego podziel przez pace.
Jako bonus użyj niesamowitych metod formatowania napisów opisanych tutaj: http://docs.python.org/library/string.html#format-specification-mini-language
Aby określić procent konwersji i precyzję.
Świetny klejnot!
źródło
Wystarczy dodać rozwiązanie f-string Python 3
źródło
Zamiast tego chcesz to zrobić:
.0
Oznacza je jako pływaków iint()
rund je do liczb całkowitych potem znowu.źródło
int()
nie zaokrągla. npint(1.9) != 2
. Zaokrąglanie można wykonać w ten sposób -round(1.9,0) == 2
int()
z pewnością zaokrągla liczbę w dół . Mój przykład robi dokładnie to, co miałem na myśli; odcinanie cyfr, ponieważ tego właśnie chciał PO.int()
upuszcza cyfry. Nie zaokrągla w dół. Zaokrąglanie oznacza, że robi coś z cyframi. Wynik końcowy jest taki sam; w tym sensie rozumiem twój punkt widzenia. Ponadto OP nie wyjaśnia, co chce zrobić z cyframi, ma 33 333 ... zaokrągla do 33. Dziękuję za odpowiedź na mój komentarz i życzę miłego dnia!