2011-11-14 8 views
14

sto correndo nella seguente problema:Python - arrotondamento per quarti di intervalli

vari numeri Attribuite come:

10,38

11,12

5,24

9,76

esiste già una funzione 'built-in' per aggirare il m fino al 0,25 passo più vicino, come ad es .:

10.38 -> 10,50

11,12 -> 11,00

5,24 -> 5,25

9,76 -> 9-75?

Oppure posso andare avanti e modellare una funzione che esegue l'operazione desiderata?

Grazie in anticipo e

con i migliori saluti

Dan

risposta

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

* head ---> desk * infatti banale - smetterò di scrivere codice alle 5:00 -.- grazie pulegium e 6502 – Daniyal

4

Non c'è incorporato, ma tale funzione è banale scrivere

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

Si tratta di un soluzione generica che consente l'arrotondamento a risoluzioni arbitrarie. Per il tuo caso specifico, devi solo fornire 0.25 come risoluzione ma sono possibili altri valori, come mostrato nei casi di test.

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) 

This uscite:

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

una bella soluzione generica. Come posso contrassegnare tutte le soluzioni date come "risposta accettata"? – Daniyal

+3

@Daniyal: non puoi. Il mio comportamento abituale, se le risposte non possono essere classificate in base al merito, è di darlo (insieme a un upvote) al ragazzo con il rappresentante più basso e anche alzare gli altri. In questo caso, non sono io purtroppo :-) – paxdiablo

2

La soluzione di paxdiablo può essere un po 'migliorata.

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

quindi la funzione è ora: "sensibile al tipo di dati".