Python 检查由range元素划分的范围长度是否没有除法余数

Python 检查由range元素划分的范围长度是否没有除法余数,python,python-3.x,floating-point,rounding,division,Python,Python 3.x,Floating Point,Rounding,Division,如果数组中的元素数量不是整数类型的数字,则下面的代码应显示特定注释。 它适用于dr=0.5,但不适用于dr=0.1,因为print(4%0.1)返回0.09999999978,而不是0 如何更改代码以获得4%0.1==0 import math limits_real=(-2,2) dr=0.1 if (limits_real[1]-limits_real[0])%dr!=0: print ('Inapropriate limits or elements') 我只发现了这个解决方

如果数组中的元素数量不是整数类型的数字,则下面的代码应显示特定注释。 它适用于
dr=0.5
,但不适用于
dr=0.1
,因为
print(4%0.1)
返回
0.09999999978
,而不是
0

如何更改代码以获得
4%0.1==0

import math

limits_real=(-2,2)
dr=0.1

if (limits_real[1]-limits_real[0])%dr!=0:
    print ('Inapropriate limits or elements')

我只发现了这个解决方案:)至少它是有效的

导入数学
极限_实=(-2,2)
dr=0.1
如果((限值实值[1]-限值实值[0])*1000%(dr*1000))/1000!=0:
打印(‘不适当的限制或元素’)
它适用于dr=0.5,但不适用于dr=0.1,因为print(4%0.1)返回0.09999999978而不是0

由于浮点数有每个程序员都应该知道的限制,请参见以下内容:

如上述文档末尾所示,您可以使用
decimal
模块,该模块工作正常,但速度比普通浮点算术慢:

从十进制导入十进制
极限_实=(-2,2)
dr=十进制(“0.1”)
如果(限制实数[1]-限制实数[0])%dr!=0:
打印(‘不适当的限制或元素’)

请注意,在构造
Decimal
实例时,应该使用
str
,不要使用
float

尝试使用math.fmod()try int((limits\u real[1]-limits\u real[0])%dr来计算=0
数组中的元素数不是整数类型的数字
-有点让人困惑:数组中的元素数(您使用的是元组)怎么可能不是整数类型的<代码>不存在(len(limits_real),int)?这不是一个通用的解决方案,仍然有问题,请参阅我答案上的文档链接。@wwii您不应该使用
浮点
来构造
十进制
,在我的代码中使用
str
。代码出错的原因与不带
Decimal
的代码出错的原因相同。