检查范围长度除以范围元素是否无除余数

Check if the length of the range divided by range element has no division remainder

如果数组中的元素个数不是整型数,下面的代码会给出具体的注释。 它适用于 dr=0.5 但不适用于 dr=0.1 因为 print (4%0.1) returns 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')

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

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')

It works for dr=0.5 but not for dr=0.1 because print (4%0.1) returns 0.09999999999999978 instead of 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')

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