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?

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.


279

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

"{:.2f}".format(5)

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 .


6

Formatowanie ciągów:

print "%.2f" % 5

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)

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'


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'

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

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

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.

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.