Wyświetla liczbę zmiennoprzecinkową z dwoma miejscami po przecinku w Pythonie

144

Mam funkcję pobierającą argumenty typu float (zwykle liczby całkowite lub dziesiętne z jedną cyfrą znaczącą) i muszę wyprowadzić wartości w ciągu z dwoma miejscami dziesiętnymi (5 -> 5,00, 5,5 -> 5,50 itd.). Jak mogę to zrobić w Pythonie?

MarathonStudios
źródło

Odpowiedzi:

153

Możesz użyć do tego operatora formatowania ciągu:

>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'

Wynikiem operatora jest ciąg, więc możesz go zapisać w zmiennej, wydrukować itp.

NPE
źródło
279

Ponieważ ten post może być tutaj przez chwilę, zwróćmy również uwagę na składnię Pythona 3:

"{:.2f}".format(5)
Daren Thomas
źródło
9
Dla kompletności, jeśli d=3"{:.{}f}".format(5, d)
ułamki
83

formatowanie f-stringów :

To było nowe w Pythonie 3.6 - ciąg znaków jest jak zwykle umieszczany w cudzysłowie, poprzedzony f'...w taki sam sposób, jak r'...w przypadku nieprzetworzonego ciągu. Następnie umieszczasz wszystko, co chcesz umieścić w swoim ciągu, zmiennych, liczbach, w nawiasach klamrowych f'some string text with a {variable} or {number} within that text'- a Python ocenia tak, jak w przypadku poprzednich metod formatowania ciągów, z wyjątkiem tego, że ta metoda jest znacznie bardziej czytelna.

>>> foobar = 3.141592
>>> print(f'My number is {foobar:.2f} - look at the nice rounding!')

My number is 3.14 - look at the nice rounding!

Jak widać w tym przykładzie, formatujemy z miejscami dziesiętnymi w podobny sposób jak poprzednie metody formatowania ciągów.

NB foobarmoże być liczbą, zmienną, a nawet wyrażeniem npf'{3*my_func(3.14):02f}' .

Idąc dalej, z nowym kodem wolę f-stringi niż typowe metody% s lub str.format (), ponieważ f-stringi mogą być dużo bardziej czytelne i często są dużo szybsze .

toonarmycaptain
źródło
6

Formatowanie ciągów:

print "%.2f" % 5
bradley.ayers
źródło
1
Ale to wszystko to łańcuchy, więc nie
jestem w
@itsaruns Dodanie pustych miejsc po przecinku nie ma znaczenia, jeśli potrzebujesz tylko wykonać na nich operacje matematyczne. Może szukasz math.floor, math.ceillubround
Steen Schütt
6

Formatowanie ciągów:

a = 6.789809823
print('%.2f' %a)

LUB

print ("{0:.2f}".format(a)) 

Funkcji Round można użyć:

print(round(a, 2))

Zaletą round () jest to, że możemy zapisać ten wynik w innej zmiennej, a następnie użyć go do innych celów.

b = round(a, 2)
print(b)
debaonline4u
źródło
5
Głosuj przeciw round. Nie należy go używać tylko do wyświetlania .
wim
@wim Szanuję Twój komentarz, ale te odpowiedzi mają na celu zaspokojenie czyichś wymagań.
debaonline4u
2
@ debaonline4u wim ma rację. round(5.0001, 2)-> 5.0, nie'5.00'
wjandrea
5

Korzystanie z formatowania ciągów w języku Python.

>>> "%0.2f" % 3
'3.00'
kevpie
źródło
3

Najkrótsza składnia Pythona 3:

n = 5
print(f'{n:.2f}')
Dos
źródło
Już objęta tą odpowiedzią sprzed 2 lat
wjandrea
3

Jeśli faktycznie chcesz zmienić samą liczbę zamiast wyświetlać ją w inny sposób, użyj formatu ()

Sformatuj go do 2 miejsc po przecinku:

format(value, '.2f')

przykład:

>>> format(5.00000, '.2f')
'5.00'
Josh
źródło
0

Wiem, że to stare pytanie, ale sam nie mogłem znaleźć odpowiedzi. Oto co wymyśliłem:

Python 3:

>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict) 
0.12_0.13
Vasiliy Triandafilidi
źródło
3
Cześć, witaj w Stack Overflow. Odpowiadając na pytanie, na które jest już wiele odpowiedzi, pamiętaj o dodaniu dodatkowego wglądu w to, dlaczego udzielana przez Ciebie odpowiedź jest merytoryczna, a nie po prostu odzwierciedlająca to, co zostało już sprawdzone przez oryginalny plakat. Jest to szczególnie ważne w przypadku odpowiedzi „tylko kod”, takich jak ta, którą podałeś.
chb
-1

Korzystanie ze składni Pythona 3:

print('%.2f' % number)
S. Roelofs
źródło
1
% -formatowanie nie jest nowością w Pythonie 3 i jest już objęte tą odpowiedzią sprzed 6 lat
wjandrea
-1

Jeśli chcesz uzyskać wartość zmiennoprzecinkową z dwoma miejscami po przecinku, ograniczoną w momencie wywołania wejścia,

Sprawdź to ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.
karthik Elango
źródło
Po evalco ciąg, skoro można po prostu round? W każdym razie to nawet nie działa poprawnie, ponieważ jeśli się zasilisz 5, otrzymasz 5.0zamiast tego, 5.00jak chce OP.
wjandrea