Op 2/09/2021 om 17:08 schreef Hope Rouselle:
>>>> ls = [7.23, 8.41, 6.15, 2.31, 7.73, 7.77]
>>>> sum(ls)
> 39.599999999999994
>
>>>> ls = [8.41, 6.15, 2.31, 7.73, 7.77, 7.23]
>>>> sum(ls)
> 39.60000000000001
>
> All I did was to take the first number, 7.23, and move it to the last
> position in the list.  (So we have a violation of the commutativity of
> addition.)

Suppose these numbers are prices in dollar, never going beyond cents.
Would it be safe to multiply each one of them by 100 and therefore work
with cents only?
For working with monetary values, or any value that needs to accurate correspondence to 10-based values, best use Python's Decimal; see the documentation: https://docs.python.org/3.8/library/decimal.html

Example:

from decimal import Decimal as D
ls1 = [D('7.23'), D('8.41'), D('6.15'), D('2.31'), D('7.73'), D('7.77')]
ls2 = [D('8.41'), D('6.15'), D('2.31'), D('7.73'), D('7.77'), D('7.23')]
print(sum(ls1), sum(ls2))

Output:
39.60 39.60

(Note that I initialized the values with strings instead of numbers, to allow Decimal access to the exact number without it already being converted to a float that doesn't necessarily exactly correspond to the decimal value)

--
"Your scientists were so preoccupied with whether they could, they didn't
stop to think if they should"
        -- Dr. Ian Malcolm

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to