我继承了一个非常大的经典ASP网站,最近发现了一个错误。它多次从Access数据库读取和写入,并且所有这些都按预期工作。但是,我认为这部分代码存在错误:
Dim SeptAvg, mvUPreq, mvSeptAvg
SeptAvg = CDbl(rs.fields(5))
mvUPreq = -0.15
if SeptAvg <= mvUPreq then
mvSeptAvg = true
else
mvSeptAvg = false
end if
现在在这种情况下,访问数据库中的SeptAvg
是-8.5%。这个表达式应该评估为True - 但事实并非如此。在此代码之后,有一个Access数据库的更新,它将字段(在Access数据库中是一个复选框)设置为true或false。该复选框始终未选中。我检查并重新检查了数据库更新代码,我知道那里没有错误。 CDbl是否在数据库的-8.5%值上发生了什么?
请指教,因为我的经典ASP体验非常有限。
答案 0 :(得分:2)
-8.5% = -0.085
和-0.085
确实大于-0.15
。这就是它评估true
-1 > -10
Abs(1) < Abs(10)
1 < 10
答案 1 :(得分:1)
-8.5%表示为小数是-0.085
因此If
条件等同于......
if -0.085 <= -0.15 then
但-0.085大于-0.15,因此条件不是True
,因此mvSeptAvg
不会设置为True
。
答案 2 :(得分:1)
如果您希望将其评估为TRUE
,则需要稍微调整一下代码:
Dim SeptAvg, mvUPreq, mvSeptAvg
SeptAvg = CDbl(rs.fields(5))
mvUPreq = -0.15
if abs(SeptAvg) <= abs(mvUPreq) then
mvSeptAvg = true
else
mvSeptAvg = false
end if