如何修复 python 中的浮点错误

How to fix the floating point error in python

我最近一直在尝试在python中制作一个计算器并在其中添加浮点数 但不幸的是,它给了我这个简单的代码

print(0.1 + 0.2)

out put

0.30000004

我在 Whosebug 中搜索了很多,但我不断收到关于它发生的原因而不是如何修复它的问题。 编辑: 很多人最近一直在给我私人反馈,关于这个已经存在,我很欣赏改进 Whosebug,但毫无疑问,他们中的大多数都是解释为什么会发生,而不是如何解决它。一些反馈甚至提出了不是 python

的问题

您可以使用带有字符串的 decimal 内置模块并创建您自己的方法:

from decimal import Decimal
def exact_add(*nbs):
    return float(sum([Decimal(str(nb)) for nb in nbs]))

exact_add(0.1, 0.2)
# > 0.3

我认为解决此问题的推荐方法是确定您要考虑的小数位数,并使用内置 round 函数四舍五入到该位数。假设你想使用 5 位小数,你可以这样做:

ans = 0.1 + 0.2
print(ans)    # 0.30000004
round(ans,5)
print(ans)    # 0.3

请注意,该回合最后还会去掉多余的零。如果将 0.333333333333 舍入为 5 位小数,它将 return 0.33333,但舍入 0.30000000004 returns 0.3.

这与 python 无关,但与浮点值在您的计算机上的表示方式有关。浮点数的工作方式对于所有语言都是相同的,并且它可能会引入舍入错误。 This link 向您展示了为什么会出现此错误。

只要减少可见数字的数量就可以了。刚才所有的计算机和计算器都对数字进行了限制space,而且都容易出现四舍五入的错误。

您可以使用:

a = 0.1 + 0.2
a = round(a, 2)
print(a)
Output: 0.3

您可以尝试以下任何一种适合您的常规方法

#for two decimal places use 2f, for 3 use 3f
val = 0.1 + 0.2
print(f"val = {val:.2f}")

#output | val = 0.30

#or else 
print(round(val,2))

#output | val = 0.30

使用 round() 语法去除过多的零。 '''

a = 0.1
b = 0.2
c = a + b 
answer = round(c,3)   # here 3 represents the number of digits you want to round
print(answer)    

''' 如果您想进一步了解 round() 语法,只需访问此 link 一次:https://www.bitdegree.org/learn/python-round