1

我继承了一个非常大的 Classic 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。该复选框始终未选中。我检查并重新检查了数据库更新代码,我知道那里没有错误。数据库中的 -8.5% 值上的 CDbl 是否发生了什么问题?

请指教,因为我的经典 ASP 经验非常有限。

4

3 回答 3

2

-8.5% = -0.085并且-0.085确实大于-0.15。这就是为什么它正在评估true

-1 > -10
Abs(1) < Abs(10)
1 < 10
于 2013-07-12T16:09:05.690 回答
1

-8.5% 以小数表示为 -0.085

所以If条件等价于...

if -0.085 <= -0.15 then

但 -0.085 大于 -0.15,因此条件不是True,因此mvSeptAvg不会设置为True

于 2013-07-12T16:09:23.023 回答
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 
于 2013-07-12T16:24:33.913 回答