检查范围长度除以范围元素是否无除余数
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
。
如果数组中的元素个数不是整型数,下面的代码会给出具体的注释。
它适用于 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
。