Python除法返回不正确的结果
我想写一个函数,它接受2个值并计算除法是否为整数,但是当输入5.1和0.1时,我在处理这种情况时遇到了困难,因为结果不是预期的51Python除法返回不正确的结果,python,division,Python,Division,我想写一个函数,它接受2个值并计算除法是否为整数,但是当输入5.1和0.1时,我在处理这种情况时遇到了困难,因为结果不是预期的51 def(a,b): return a/b.is_integer() 我尝试了另一个版本,将值也转换为小数,但仍然存在相同的问题: def(a,b): return Decimal(a)%Decimal(b) == 0 这是一个算术精度的问题(以及计算机中使用浮点的其他语言),在这种情况下,您可以做两件事中的一件,第一种情况是假设它会有一些限制并
def(a,b):
return a/b.is_integer()
我尝试了另一个版本,将值也转换为小数,但仍然存在相同的问题:
def(a,b):
return Decimal(a)%Decimal(b) == 0
这是一个算术精度的问题(以及计算机中使用浮点的其他语言),在这种情况下,您可以做两件事中的一件,第一种情况是假设它会有一些限制并处理它,或者第二种情况是使用一个专门的库来处理这些问题 一个很好的折衷办法是在除数中使用有限的精度,例如,您可以假设函数中的任何除数
b
都可以是一个精度最高为3位的数字,如5.999
或0.001
,然后您可以首先将被除数a
和除数b
乘以1000
,然后尝试在那里除法
让我们重写您的函数(假设您使用的是Python 3)
另一种选择是使用numpy、mpmath或其他库,但对于一般的简单情况,您可能不需要它们。这是一个算术精度问题(以及计算机中使用浮点的其他语言),在这种情况下,您可以做两件事之一,第一种情况是假设它会有一些限制并加以处理,或者第二种情况是使用一个专门的库来处理这些问题 一个很好的折衷办法是在除数中使用有限的精度,例如,您可以假设函数中的任何除数
b
都可以是一个精度最高为3位的数字,如5.999
或0.001
,然后您可以首先将被除数a
和除数b
乘以1000
,然后尝试在那里除法
让我们重写您的函数(假设您使用的是Python 3)
另一种选择是使用numpy、mpmath或其他库,但对于一般的简单情况,可能不需要它们。
Decimal
?你的意思是float()
还是你在使用import
?应该a/b。is_integer()
be(a/b)。is_integer()
?在python3a/b
中总是返回a/bfloat@JuanC这是不正确的,在python2中,您将得到一个整数sometimes@Chris_Rands编辑的<代码>十进制?你的意思是float()
还是你在使用import
?应该a/b。is_integer()
be(a/b)。is_integer()
?在python3a/b
中总是返回a/bfloat@JuanC这是不正确的,在python2中,您将得到一个整数sometimes@Chris_Rands编辑
def is_division_integer(a, b):
a = 1000*a
b = 1000*b
d = a/b
if type(d) == int:
return True
return d.is_integer()