Jak można obciąć wejście jak 315.15321531321 Chcę obciąć wszystkie wartości po pozycji setnych więc staje 315.15Python przyciąć po setkach?
jak mam to zrobić?
Jak można obciąć wejście jak 315.15321531321 Chcę obciąć wszystkie wartości po pozycji setnych więc staje 315.15Python przyciąć po setkach?
jak mam to zrobić?
String formatowanie pod Pythona 2.x powinien to zrobić dla Ciebie:
>>> print '%.2f' % 315.15321531321
315.15
Ogranicza to reprezentacja ciąg do zaledwie 2 miejsca po przecinku. Zauważ, że jeśli używasz round(315.153215, 2)
, będziesz skończyć z inną wartość pływaka, który jest naturalnie niedokładny (lub overprecise, w zależności jak na to spojrzeć):
>>> round(315.15321531321, 2)
315.14999999999998
Technicznie round()
jest poprawne, ale to nie robi "t" obcina "wyniki zgodnie z żądaniem pod numerem 315.15
. Dodatkowo, jeśli zaokrąglisz wartość równą 315.157, pojawi się coś bliższego 315.16 ... nie jesteś pewien, czy to masz na myśli przez "obcięcie".
i dla Python3: format (315.153321, ".2f") – NicDumZ
Co ciekawe wczytałem wczoraj, że Python 3.1rc1 wybiera teraz najkrótszą reprezentację napisów, która rozdziela się na tę samą liczbę zmiennoprzecinkową, więc twój drugi przykład z rundą() wypisze 315.15 zgodnie z oczekiwaniami: http://docs.python.org/dev/py3k/whatsnew/3.1.html#other-language-changes –
Dziękuję, Greg - nie wiedziałem o tym. Dobre dodatkowe informacje; im więcej słyszę o py3k, tym bardziej nie mogę się doczekać, aby użyć go codziennie! –
Jeśli chcesz tylko do wyświetlania go skrócić, można użyć flagi "%f"
formatowania:
value = 315.123123123
print "Value is: %.2f" % value
Jeśli chcesz naprawdę odciąć „dodatkowy” cyfry, zrobić coś takiego:
from math import trunc
value = trunc(value*100)/100
Wbudowana funkcja round()
:
>>> num = 315.1532153132
>>> round(num, 2)
3.1499999999999998
masz s kilka opcji - możesz zaokrąglić liczbę za pomocą round(), jednak może to wprowadzić pewne niedokładności (na przykład 315.15 może zaokrąglić do 315.150000003). Jeśli chcesz po prostu skrócić wartość float podczas wyświetlania, możesz określić szerokość wyjścia za pomocą printf ("%. 2f", mynumber). Jest to prawdopodobnie lepsze rozwiązanie, ponieważ nie wiedząc więcej o konkretnej aplikacji, ogólnie dobrym pomysłem jest zachowanie całej długości liczby do obliczenia.
Jeśli pracujesz z kwot walutowych, zdecydowanie zaleca się stosowanie klasy Pythona dziesiętną Zamiast: http://docs.python.org/library/decimal.html
wygląda print „% .2f” ma zaokrąglenia, jak również. Oto kod Pythona, który uzupełnia i obcina
num = 315.15627
print "rounded = %.2f" % num
print "truncated = %.2f" % (int(num*100)/float(100))
rounded = 315.16
truncated = 315.15
Podczas pracy z Decimal
typów i waluty, w przypadku gdy kwota musi być precyzyjny, oto co wymyśliłem do obcinania do centów (setnych):
amount = Decimal(long(amount * 100))/Decimal(100)
Mała historia: Wypróbowałem quantize
, ale raczej zaokrągla, niż ścina. I nie mogłem z czystym sumieniem używać drogich formaterów do czegoś tak prostego. I w końcu nie chciałem żadnych problemów z precyzją a la float
, więc używam bardzo specyficznego castingu, który jest prawdopodobnie przesadą.
Może to pomoże:
a=315.15321531321
a=a*100
a=int(a)
a=a/100.0
print(a)
315.15
Objaśnienie: Jeśli chcesz zaokrąglić w drugiego miejsca po przecinku, a następnie należy:
1. pomnożyć liczbę przez 100; to daje 31515.321531321,
2. przekonwertować tę nową liczbę na liczbę całkowitą; int (31515.321531321) daje 31515,
3. podziel to przez 100,0; 31515/100.0,
4. i otrzymasz poprawną odpowiedź; 315.15
Ciesz się!
Twoja odpowiedź na pewno warta trochę wyjaśnienia. Prosimy zapoznać się z http://stackoverflow.com/help/how-to-answer. –
Możesz również zajrzeć na http://stackoverflow.com/questions/455612/python-limiting-floats-to-two-dimal-points/455634#455634 –
Rex, podoba mi się odpowiedź na pytanie zacytowany tak bardzo, tylko go przegłosowałem; wykonałeś świetną robotę wyjaśniając połączenia między int, float i Decimal w Pythonie. –