我有一个简单的代码
def func(a,b):
if (b>=3.0) and (b<=4.0):
if (a>=3.0) and (a<=6.0):
var_region='A'
if (a>6.0) and (a<=11.0):
var_region='B'
if (b>4.0):
var_region='C'
region=var_region
print region
return region
Tmax=4.1
Tmin=3.0
T=Tmin
var=3.0
dT=0.1
while T<Tmax:
calll=func(var,T)
T=T+dT
该计划的输出是:
A,A..........,C
在while循环中,&#34; T&#34;的最终值是4.0,它打印&#34; C&#34;而不是&#34; A&#34;。那是为什么?
答案 0 :(得分:5)
这是因为浮点数不能用float
精确表示,所以它的计算也不精确。 b
不是4.0
,而是一个非常接近它的浮点数。添加这可能有助于您理解:
if (b>4.0):
print(repr(b))
var_region='C'
输出:
4.000000000000001
C
答案 1 :(得分:1)
原因浮动类型在计算机中不准确。
while T<Tmax:
print T
calll=func(var,T)
T=T+dT
在函数调用while循环之前添加一个print语句,你会发现T的最终值是4.000000000000001
而if (b>4.0):
将获得True
值,并导致最后一个输出为{ {1}}
我建议您使用十进制来实现您想要的,该类型在计算机中是精确的
C
答案 2 :(得分:-1)
这是因为.1不能完全表示为浮点数,因此计算不能准确给出您期望的结果。如果在函数内打印b,则在最后一次调用时会发现该值为4.000000000000001。顺便说一句,在python中,你不必编写像
这样的尴尬的东西if (b>=3.0) and (b<=4.0):
你可以写
if 3.0 <= b <= 4.0: