2011-11-14 12 views
14

biegnę do następującej kwestii:Python - Zaokrąglanie przez ćwierć odstępach

Biorąc pod uwagę różne numery jak:

10,38

11,12

5,24

9,76

ma już "wbudowaną" funkcję, aby zaokrąglić m do najbliższego 0,25 etapie, jak np .:

10,38 -> 10,50

11,12 -> 11,00

5,24 -> 5,25

9,76 -> 9-75?

Albo czy mogę śmiało łączyć funkcję, która wykonuje żądane zadanie?

góry dzięki i

z poważaniem

Dan

Odpowiedz

24
>>> def my_round(x): 
... return round(x*4)/4 
... 
>>> 
>>> assert my_round(10.38) == 10.50 
>>> assert my_round(11.12) == 11.00 
>>> assert my_round(5.24) == 5.25 
>>> assert my_round(9.76) == 9.75 
>>> 
+0

* głowa ---> biurko * rzeczywiście trywialne - zatrzymam kodowanie o 5 rano -. dziękuję pulegium i 6502 – Daniyal

4

Nie ma wbudowane, ale taka funkcja jest trywialne napisać

def roundQuarter(x): 
    return round(x * 4)/4.0 
26

Jest to rozwiązanie ogólnego przeznaczenia umożliwiające zaokrąglanie do arbitralnych rozwiązań. W konkretnym przypadku wystarczy podać rozdzielczość 0.25, ale możliwe są inne wartości, jak pokazano w przypadkach testowych.

def roundPartial (value, resolution): 
    return round (value/resolution) * resolution 

print "Rounding to quarters" 
print roundPartial (10.38, 0.25) 
print roundPartial (11.12, 0.25) 
print roundPartial (5.24, 0.25) 
print roundPartial (9.76, 0.25) 

print "Rounding to tenths" 
print roundPartial (9.74, 0.1) 
print roundPartial (9.75, 0.1) 
print roundPartial (9.76, 0.1) 

print "Rounding to hundreds" 
print roundPartial (987654321, 100) 

ten wyjścia:

Rounding to quarters 
10.5 
11.0 
5.25 
9.75 
Rounding to tenths 
9.7 
9.8 
9.8 
Rounding to hundreds 
987654300.0 
+0

piękne ogólne rozwiązanie. Jak mogę oznaczyć wszystkie podane rozwiązania jako "zaakceptowaną odpowiedź"? – Daniyal

+3

@Daniyal: nie możesz. Moje zwykłe zachowanie, jeśli odpowiedzi nie mogą być posortowane według zasług, to przekazanie go (wraz z uprowadzeniem) do faceta z najniższym przedstawicielem, a także upomnienie pozostałych. W tym przypadku to niestety ja :-) – paxdiablo

2

Roztwór paxdiablo może być trochę lepsza.

def roundPartial (value, resolution): 
return round (value /float(resolution)) * resolution 

, więc funkcja jest teraz: "wrażliwa na dane".