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