【问题标题】:Python weird subtraction resultPython奇怪的减法结果
【发布时间】:2014-06-30 17:29:08
【问题描述】:

这是我的字典:

weights = {
71.03711 : "A",
156.10111 : "R",
114.04293 : "N",
115.02694 : "D",
103.00919 : "C",
129.04259 : "E",
128.05858 : "Q",
57.02146 : "G",
137.05891 : "H",
113.08406 : "I",
128.09496 : "K",
131.04049 : "M",
147.06841 : "F",
97.05276 : "P",
87.03203 : "S",
101.04768 : "T",
186.07931 : "W",
163.06333 : "Y",
99.06841 : "V",
}

现在我做一个计算:

a = (129.08346 - 15.99940) # a = 113.08406 = "I" (in dictionary)

然后:

sequence += weights[a]

错误:

Traceback (most recent call last):
  File "task2.py", line 43, in <module>
    sequence += weights[a]
KeyError: 113.08406000000001

他为什么附上那个 1 ? :( 我需要 113.08406 的值!

【问题讨论】:

  • 这是一个浮点精度问题。我敢肯定周围有很多骗子......基本上,问题在于浮点数会产生错误的字典键,因为很难从计算中获得完全正确的浮点数。
  • 浮点运算不是很精确。可以存储的浮点值只有这么多,如果您的减法没有准确命中一个,则采用最接近的一个。不要对字典键使用浮点数,而是尝试将每个值乘以 100000 得到整数键,这样就不会有这个问题。

标签: python


【解决方案1】:

将结果传递给round()函数:

a = round(129.08346 - 15.99940, 5) # second argument is number of decimals

输出:

113.08406

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2016-07-26
    • 2022-10-06
    • 2014-08-17
    相关资源
    最近更新 更多