Mam listę lub tablicę liczb dziesiętnych w języku Python. Muszę zaokrąglić je do najbliższych 2 miejsc po przecinku, ponieważ są to kwoty pieniężne. Potrzebuję jednak całkowitej sumy, tj. Suma oryginalnej tablicy zaokrąglonej do 2 miejsc dziesiętnych musi być równa sumie zaokrąglonych elementów tablicy.Okrągłą listę numerów w języku Python i utrzymywanie sumy
Oto mój kod do tej pory:
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
muszę skutecznego sposobu zmieniająca moja nowa tablica zaokrąglone tak, że suma ta jest również 187.976,61. Różnica w wysokości 2 pensów musi być zastosowana do pozycji 7 i 6, ponieważ mają one największą różnicę między zaokrąglonymi wpisami i oryginalnymi wpisami.
Wszelkie pomysły?
Prawdopodobnie nie powinno się za pomocą liczb zmiennoprzecinkowych do reprezentowania kwoty pieniężne. Istnieje wiele liczb, takich jak '0.10', których' float' nie może dokładnie reprezentować. – NPE
Co jest nie tak z twoim numpy rozwiązaniem? Jeśli dobrze rozumiem, to jest odpowiedź, której szukasz ... – mgilson
@NPE: Czy to nie jest runda? Mam na myśli, że każda niepewność w liczbie 0.1 powinna być porównywalna do precyzji maszyny, prawda? – BenDundee