【发布时间】:2021-09-16 14:39:50
【问题描述】:
我想检查一个浮点数是否是另一个浮点数的倍数,但遇到了机器精度问题。例如:
t1 = 0.02
factor = 0.01
print(t1%factor==0)
以上输出True,但是
t2 = 0.030000000000000002
print(round(t2,5)%factor==0)
这会输出False。在我的代码中的某些点,我正在检查的数字会产生这些机器精度错误,我想我可以简单地通过四舍五入来解决这个问题(我的代码后面需要 5 个小数位,但如果我只需将其四舍五入到小数点后 2 位)。
任何想法为什么上述检查 round(t2,5)%factor==0 不能按预期工作,以及如何解决?
【问题讨论】:
-
对我来说,t1%factor == 0 返回 false
-
@ZaidAlShatle 对不起,我的意思是输入 t1=0.02(见编辑),它返回 True。但这揭示了一些非常奇怪的事情。为什么 0.02%0.01==0 返回 True,而 0.03%0.01==0 返回 False?
-
我认为由于
round(t2,5)%factor和t1%factor将返回一个浮点数,因此您还需要将其四舍五入为round(round(t2,5)%factor)和round(t1%factor) -
@user696969 的答案也可以是正确的,但是如果差值为 0.4999 则它不起作用,它应该返回 False,但如果你将它四舍五入,它将返回 True。
-
这是一个很好的解释:stackoverflow.com/a/14763891/3047101
标签: python python-3.x rounding precision