Chcę wyświetlić:
49
tak jak 49.00
i:
54.9
tak jak 54.90
Bez względu na długość miejsca po przecinku lub czy są jakieś miejsca po przecinku, chciałbym wyświetlić Decimal
z 2 miejscami po przecinku i chciałbym to zrobić w efektywny sposób. Celem jest wyświetlanie wartości pieniężnych.
na przykład, 4898489.00
python
string-formatting
orokusaki
źródło
źródło
Odpowiedzi:
Przypuszczam, że prawdopodobnie używasz
Decimal()
obiektów zdecimal
modułu? (Jeśli potrzebujesz dokładnie dwóch cyfr precyzji poza kropką dziesiętną z dowolnie dużymi liczbami, zdecydowanie powinieneś być, i tak sugeruje tytuł pytania ...)Jeśli tak, sekcja Dziesiętne FAQ w dokumentach zawiera parę pytań / odpowiedzi, która może Ci się przydać:
Następne pytanie brzmi
Jeśli potrzebujesz odpowiedzi na to pytanie (wraz z mnóstwem innych przydatnych informacji), zapoznaj się z wyżej wymienioną sekcją dokumentów . Ponadto, jeśli trzymasz
Decimal
s z dwiema cyframi precyzji poza przecinkiem dziesiętnym (co oznacza tyle precyzji, ile jest konieczne, aby wszystkie cyfry były na lewo od przecinka dziesiętnego i dwie na prawo od niego i nie więcej ...), następnie przekonwertowanie ich na ciągi znakówstr
będzie działało dobrze:źródło
Należy użyć specyfikacji nowego formatu, aby zdefiniować sposób reprezentacji wartości:
Czasami dokumentacja może być nieco tępa, dlatego polecam następujące, łatwiejsze do odczytania odniesienia:
.format()
napisów w języku Python : pokazuje przykłady formatowania napisów w nowym stylu%
ciąg formatowanie z nowym stylu.format()
formatowania smyczkowąW Pythonie 3.6 wprowadzono literalną interpolację ciągów znaków (znaną również jako ciągi f), dzięki czemu można teraz napisać powyższe jeszcze bardziej zwięzłe:
źródło
format
zwraca astr
, a niefloat
:print type({0:.2f}".format(pi))
zwraca<type 'str'>
.return
. Proszę, mentalnie zmień to naprint
s."{:.2f}".format(pi)
0:
zrobić? Zakładam, że.
jest częścią ciągu pythonSekcja Operacje formatowania łańcucha w dokumentacji Pythona zawiera odpowiedź, której szukasz. W skrócie:
Kilka przykładów:
źródło
0
późniejszego%
i nie trzeba owijaćnum
wtuple
.r = 1; "%s" % r; r = (1, 2); "%s" % r
kontrar = 1; "%s" % (r,); r = (1,2 ); "%s" % (r,)
. Jako takie, najbardziej wyrafinowane style kodowania w Pythonie wykorzystują teraz bezwarunkową krotkę (a Python 3 przestarzał całą metodę formatowania ciągów jako podatną na błędy).Możesz użyć operatora formatowania łańcucha w następujący sposób:
Nie jestem pewien, co rozumiesz przez „wydajny” - prawie na pewno nie jest to wąskie gardło twojej aplikacji. Jeśli twój program działa wolno, profiluj go najpierw, aby znaleźć gorące punkty, a następnie zoptymalizuj je.
źródło
Można zmienić
2
w2f
dowolnej liczbie miejsc po przecinku, które chcesz pokazać.EDYTOWAĆ:
Z
Python3.6
ta przekłada się na:źródło
.format jest bardziej czytelnym sposobem obsługi formatowania zmiennych:
źródło
W Pythonie 3 można to zrobić
źródło
jeśli masz wiele parametrów, których możesz użyć
źródło
Jeśli używasz tego do waluty, a także chcesz, aby wartość była oddzielona przez
,
, możesz użyć$ {:,.f2}.format(currency_value)
.na przykład:
currency_value = 1234.50
$ {:,.f2}.format(currency_value)
-->
$ 1,234.50
Oto trochę kodu, który napisałem jakiś czas temu:
print("> At the end of year " + year_string + " total paid is \t$ {:,.2f}".format(total_paid))
źródło
Najprostszym przykładem pokazującym, jak to zrobić, jest:
Kod :
>>> points = 19.5
>>> total = 22
>>>'Correct answers: {:.2%}'.format(points/total)
`Wynik: prawidłowe odpowiedzi: 88,64%
źródło
co powiesz na
źródło