如何修复 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
我最近一直在尝试在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