Ich habe eine Liste oder ein Array von Dezimalzahlen in Python. Ich muss sie auf die nächsten 2 Dezimalstellen runden, da es sich um Geldbeträge handelt. Aber ich muss die Gesamtsumme beibehalten, d.h. die Summe der ursprünglichen Matrix, die auf 2 Dezimalstellen gerundet wurde, muss gleich der Summe der gerundeten Elemente der Matrix sein.Runden Sie eine Python-Liste von Zahlen und pflegen Sie die Summe
Hier ist mein Code so weit:
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
Ich brauche eine effiziente Art und Weise meine neue abgerundete Anordnung so die Änderung, dass die Summe ist auch 187.976,61. Die Differenz von 2 Pence muss auf die Elemente 7 und 6 angewendet werden, da diese den größten Unterschied zwischen den gerundeten Einträgen und den ursprünglichen Einträgen aufweisen.
Irgendwelche Ideen?
Sie sollten wahrscheinlich nicht Gleitkommazahlen verwenden darstellen Geldbeträge. Es gibt viele Zahlen, wie zum Beispiel '0.10', die' float' nicht genau darstellen kann. – NPE
Was ist los mit Ihrer numpigen Lösung? Wenn ich richtig verstehe, ist das die Antwort, die Sie suchen ... – mgilson
@ NPE: Ist das nicht, was Runde ist? Ich meine, jede Unsicherheit in der Zahl 0,1 sollte mit Maschinengenauigkeit vergleichbar sein, oder? – BenDundee