Ho una lista o una matrice di numeri decimali in Python. Ho bisogno di arrotondarli al 2 decimale più vicino in quanto si tratta di importi monetari. Ma ho bisogno che la somma complessiva sia mantenuta, cioè la somma dell'array originale arrotondato a 2 cifre decimali deve essere uguale alla somma degli elementi arrotondati dell'array.Arrotondare un elenco di numeri Python e mantenere la somma
Ecco il mio codice finora:
myOriginalList = [27226.94982, 193.0595233, 1764.3094, 12625.8607, 26714.67907, 18970.35388, 12725.41407, 23589.93271, 27948.40386, 23767.83261, 12449.81318]
originalTotal = round(sum(myOriginalList), 2)
# Answer = 187976.61
# Using numpy
myRoundedList = numpy.array(myOriginalList).round(2)
# New Array = [ 27226.95 193.06 1764.31 12625.86 26714.68 18970.35 12725.41 23589.93 27948.4 23767.83 12449.81]
newTotal = myRoundedList.sum()
# Answer = 187976.59
ho bisogno di un modo efficiente di modificare il mio nuovo array arrotondata tale che la somma è anche 187.976,61. La differenza di 2 pence deve essere applicata agli articoli 7 e 6 poiché presentano la maggiore differenza tra le voci arrotondate e le voci originali.
Qualche idea?
Probabilmente non dovrebbe essere utilizzando i numeri in virgola mobile di rappresentare importi monetari. Ci sono molti numeri, come '0.10', che' float' non può rappresentare esattamente. – NPE
Cosa c'è di sbagliato nella tua soluzione numpy? Se ho capito bene, questa è la risposta che stai cercando ... – mgilson
@NPE: Non è questo il motivo? Voglio dire, qualsiasi incertezza nel numero 0.1 dovrebbe essere paragonabile alla precisione della macchina, giusto? – BenDundee