检查range除以range元素的长度是否没有除数余数

问题描述

如果数组中的元素数量不是整数类型的数字,下面的代码显示一个特定的注释。 它适用于 dr=0.5 但不适用于 dr=0.1,因为 print (4%0.1) 返回 0.09999999999999978 而不是 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,因为打印 (4%0.1) 返回 0.09999999999999978 而不是 0。

因为浮点数有每个程序员都应该知道的局限性,请看这个: https://docs.python.org/3/tutorial/floatingpoint.html

如上述文档末尾所示,您可以使用 decimal 模块,该模块完全正确但比普通浮点算法慢:

from decimal import Decimal

limits_real=(-2,2)
dr = Decimal("0.1")

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

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

,

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

import math

limits_real=(-2,2)
dr=0.1

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