-2

I create a list of numbers in string format, transform into float and did some calculations, but there were decimal places that shouldn't exist. All numbers added have 2 decimal places.

ListaMACDL = []
ListaMM9 = []

ListaMM9.append("309.71")
ListaMM9.append("310.11")
ListaMM9.append("309.55")
ListaMM9.append("309.55")
ListaMM9.append("310.35")
ListaMM9.append("309.47")

ListaMACDL.append("245.60")
ListaMACDL.append("247.59")
ListaMACDL.append("244.80")
ListaMACDL.append("244.80")
ListaMACDL.append("248.79")
ListaMACDL.append("244.40")

difMACDL01 = (float(ListaMACDL[-1]) - float(ListaMM9[-1]))
difMACDL02 = (float(ListaMACDL[-2]) - float(ListaMM9[-2]))
difMACDL03 = (float(ListaMACDL[-3]) - float(ListaMM9[-3]))
difMACDL04 = (float(ListaMACDL[-4]) - float(ListaMM9[-4]))
difMACDL05 = (float(ListaMACDL[-5]) - float(ListaMM9[-5]))
difMACDL06 = (float(ListaMACDL[-6]) - float(ListaMM9[-6]))
somaDifMACDL1a3 = (difMACDL01 + difMACDL02 + difMACDL03)
somaDifMACDL4a6 = (difMACDL04 + difMACDL05 + difMACDL06)

print(ListaMACDL[-1])
print(ListaMACDL[-2])
print(ListaMACDL[-3])
print(ListaMM9[-1])
print(ListaMM9[-2])
print(ListaMM9[-3])
print("=======================")
print(ListaMACDL[-4])
print(ListaMACDL[-5])
print(ListaMACDL[-6])
print(ListaMM9[-4])
print(ListaMM9[-5])
print(ListaMM9[-6])
print("=======================")
print(difMACDL01)
print(difMACDL02)
print(difMACDL03)
print(difMACDL04)
print(difMACDL05)
print(difMACDL06)
print("=======================")
print(somaDifMACDL1a3)
print(somaDifMACDL4a6)
print("=======================")
print((somaDifMACDL1a3 == somaDifMACDL4a6))

After running the program, some misterious new decimal places emerged... look the result:

F:\Dropbox\Dropbox\win\TESTES>python winz.py
244.40
248.79
244.80
309.47
310.35
309.55
=======================
244.80
247.59
245.60
309.55
310.11
309.71
=======================
-65.07000000000002
-61.56000000000003
-64.75
-64.75
-62.52000000000001
-64.10999999999999
=======================
-191.38000000000005
-191.38
=======================
False

F:\Dropbox\Dropbox\win\TESTES>python
Python 3.8.9 (tags/v3.8.9:a743f81, Apr  6 2021, 14:02:34) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

Where do these excess decimal places come from?

1 Answers1

0

The solution to correct the calculations was to add the transformation of the float to 2 decimal places:

difMACDL01 = float("%.2f" % (float(ListaMACDL[-1]) - float(ListaMM9[-1])))
difMACDL02 = float("%.2f" % (float(ListaMACDL[-2]) - float(ListaMM9[-2])))
difMACDL03 = float("%.2f" % (float(ListaMACDL[-3]) - float(ListaMM9[-3])))
difMACDL04 = float("%.2f" % (float(ListaMACDL[-4]) - float(ListaMM9[-4])))
difMACDL05 = float("%.2f" % (float(ListaMACDL[-5]) - float(ListaMM9[-5])))
difMACDL06 = float("%.2f" % (float(ListaMACDL[-6]) - float(ListaMM9[-6])))

The result:

F:\Dropbox\Dropbox\win\TESTES>python winz2.py
244.40
248.79
244.80
309.47
310.35
309.55
=======================
244.80
247.59
245.60
309.55
310.11
309.71
=======================
-65.07
-61.56
-64.75
-64.75
-62.52
-64.11
=======================
-191.38
-191.38
=======================
True