Python除法返回不正确的结果

Python除法返回不正确的结果,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 这是一个算术精度的问题(以及计算机中使用浮点的其他语言),在这种情况下,您可以做两件事中的一件,第一种情况是假设它会有一些限制并

我想写一个函数,它接受2个值并计算除法是否为整数,但是当输入5.1和0.1时,我在处理这种情况时遇到了困难,因为结果不是预期的51

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()
?在python3
a/b
中总是返回a/bfloat@JuanC这是不正确的,在python2中,您将得到一个整数sometimes@Chris_Rands编辑的<代码>十进制?你的意思是
float()
还是你在使用
import
?应该
a/b。is_integer()
be
(a/b)。is_integer()
?在python3
a/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()