【问题标题】:How to do operations with decimal places in Python [duplicate]如何在 Python 中使用小数位进行运算 [重复]
【发布时间】:2021-12-26 01:50:24
【问题描述】:

我创建了一个字符串格式的数字列表,转换为浮点数并进行了一些计算,但有不应该存在的小数位。添加的所有数字都有 2 位小数。

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))

运行程序后,出现了一些神秘的新小数位……看看结果:

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.

这些多余的小数位从何而来?

【问题讨论】:

  • 这既不是错误也不是内存垃圾。

标签: python list memory numbers decimal


【解决方案1】:

更正计算的解决方案是将浮点数的转换添加到小数点后 2 位:

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])))

结果:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2014-07-25
    • 1970-01-01
    相关资源
    最近更新 更多