51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2711|回复: 14
打印 上一主题 下一主题

[原创] 为什么azbNum=gzbNum,程序还是会执行MsgBox这句啊????

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-5-27 14:05:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
If azbNum<>gzbNum Then
   MsgBox(DataTable(1,"Global")+cstr(n)+"次占比不对")
End If

前面当i3=1,2...8,当azbNum=gzbNum,都不会执行MsgBox这句.
为什么当i3=9时,当azbNum=gzbNum,程序会执行MsgBox这句啊????

[ 本帖最后由 FLY000 于 2008-5-27 15:38 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2008-5-27 15:01:41 | 只看该作者
整个的脚本如下:
Browser("登录服务器").Page("登录服务器").WebEdit("id").Set "demo001"
Browser("登录服务器").Page("登录服务器").WebEdit("pw").SetSecure "4834141a01bf0f4d5f7e4936b47ed383553cc5e6"
Browser("登录服务器").Page("登录服务器").WebElement("id").Click
Browser("登录服务器").Page("BI@Report在线演示系统").WebElement("OLAP数据源").Click
nRow1=Browser("登录服务器").Page( "BI@Report在线演示系统").Frame("Frame").WebTable("妇保院等级亏损次数").RowCount
nColumn1=Browser("登录服务器").Page( "BI@Report在线演示系统").Frame("Frame").WebTable("妇保院等级亏损次数").ColumnCount(3)
For i1=3 to nRow1
        DataTable.GetSheet("Global").SetCurrentRow(i1-2)
        For j1=1 to nColumn1
                text=Browser("登录服务器").Page( "BI@Report在线演示系统").Frame("Frame").WebTable("妇保院等级亏损次数").GetCellData(i1,j1)
                DataTable.Value(chr(j1+64),"Global")=text               
        Next
Next
Browser("登录服务器").Page("BI@Report在线演示系统").Frame("Frame").Link("点击查看 功能特点说明").Click
Browser("登录服务器").Page("BI@Report在线演示系统").Frame("Frame_2").Link("点击查看 相关OLAP数据源表").Click
Browser("登录服务器").Page("BI@Report在线演示系统").Sync
nRow2=Browser("登录服务器").Page("BI@Report在线演示系统").Frame("Frame_2").WebTable("妇保院等级医院指标").RowCount
nColumn2=Browser("登录服务器").Page("BI@Report在线演示系统").Frame("Frame_2").WebTable("妇保院等级医院指标").ColumnCount(2)

Dim nNum(10)
nNum(0)=2
For i=1 to nRow1-2
                DataTable.GetSheet("Global").SetCurrentRow(i)
                gText=DataTable(1,"Global")
                height1=Browser("登录服务器").Page("BI@Report在线演示系统").Frame("Frame_2").WebElement("html tag:=TD","innertext:="&gText).GetRoProperty("height")
                nNum(i)=height1/32+nNum(i-1)
Next

Dim n

For i2=2 to nRow2
                n=1
                DataTable.GetSheet("Action1").SetCurrentRow(i2-1)
                For j=n to nRow1-2
                        If i2=nNum(j-1) Then
                                IsText=true
                                text=Browser("登录服务器").Page("BI@Report在线演示系统").Frame("Frame_2").WebTable("妇保院等级医院指标").GetCellData(i2,3)
                                Exit for
                        else
                                IsText=false
                                n=n+1
                        End If         
                Next
                If IsText<>true Then
                        text=Browser("登录服务器").Page("BI@Report在线演示系统").Frame("Frame_2").WebTable("妇保院等级医院指标").GetCellData(i2,2)
                End if
                DataTable.Value(1,dtlocalsheet)=text
Next

For i3=1 to nRow1-2
                 n=1
                DataTable.GetSheet("Global").SetCurrentRow(i3)   
                gTotal=DataTable(2,"Global")
                If len(trim(gTotal))=0 Then
                        gTotal=0
                else
                        gTotal=cInt(gTotal)       
                End If
                gText=DataTable(1,"Global")
                height1=Browser("登录服务器").Page("BI@Report在线演示系统").Frame("Frame_2").WebElement("html tag:=TD","innertext:="&gText).GetRoProperty("height")
                aTotal=height1/32
                nCount=nCount+aTotal
                If gTotal<>aTotal Then
                        MsgBox(DataTable(1,"Global")+cstr(i3)+"次合计不对")
                End If
        For j3=3 to nColumn1
                DataTable.GetSheet("Global").SetCurrentRow(i3)
                gksNum=DataTable(j3,"Global")
                gzbNum=DataTable(j3+1,"Global")
                If len(trim(gksNum))=0 Then
                        gksNum=0
                else
                        gksNum=cInt(gksNum)       
                End If
                If len(trim(gzbNum))=0 Then
                        gzbNum=0
                else
                        gzbNum=cdbl(gzbNum)       
                End If
                For i=nCount-aTotal+1 to nCount
                        DataTable.GetSheet("Action1").SetCurrentRow(i)
                        nValue=DataTable(1,"Action1")
                        If len(trim(nValue))=0 Then
                                nValue=0
                        else
                                nValue=cInt(nValue)       
                        End If
                        If nValue=n Then
                                aksNum=aksNum+1
                        End If
                Next       
                azbNum=round(aksNum/aTotal,4)*100
                If aksNum<>gksNum Then
                        MsgBox(DataTable(1,"Global")+cstr(n)+"次户数不对")
                End If
                If azbNum<>gzbNum Then
                        MsgBox(DataTable(1,"Global")+cstr(n)+"次占比不对")
                End If
                aksNum=0
                n=n+1
                j3=j3+1               
        Next
Next

DataTable.Export ("C:\flights.xls")
Browser("登录服务器").Close
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-5-27 15:21:07 | 只看该作者
没看程序,你让此时的程序来MSGBOX 你的数字i3,azbNum,gzbNum
这几个看看~~~或者你跑到i3=8的时候MSGBOX看看区别~~~
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2008-5-27 15:37:55 | 只看该作者
我贴出的图片就有啊,上边显示出了 i3=9
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-5-27 20:38:33 | 只看该作者
大哥……你加个abs他们还能相等就怪了
很明显变量类型不一致导致的啊
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-5-27 20:42:25 | 只看该作者
azbNum=round(aksNum/aTotal,4)*100
gzbNum=cdbl(gzbNum)

the Round function rounds a number to two decimal places
the CDbl function converts an expression to a Double
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-5-28 11:51:48 | 只看该作者
1.MyDouble = CDbl(MyCurr * 8.2 * 0.01)    ' 把结果转换为 Double 型 (19.2254576)

2.下面的示例利用 Round 函数将数值四舍五入到两位小数:
Dim MyVar, pi
pi = 3.14159
MyVar = Round(pi, 2) 'MyVar contains 3.14。

最后不都是DOUBLE型吗?
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2008-5-28 11:52:02 | 只看该作者
azbNum=round(aksNum/aTotal,4)*100
gzbNum=cdbl(gzbNum)

这样最后也是DOUBLE型的吧。。。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2008-5-28 13:28:23 | 只看该作者
azbNum=round("3.14159265358979323",4)*100
gzbNum=cdbl(azbNum)
MsgBox  azbNum&VbCrLf&gzbNum&VbCrLf&(azbNum=gzbNum)

看看返回结果就知道了,应该是相等的,LZ自己再多调试下咯~~有空再帮你看下
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-5-28 21:59:09 | 只看该作者
原帖由 FLY000 于 2008-5-28 11:51 发表
1.MyDouble = CDbl(MyCurr * 8.2 * 0.01)    ' 把结果转换为 Double 型 (19.2254576)

2.下面的示例利用 Round 函数将数值四舍五入到两位小数:
Dim MyVar, pi
pi = 3.14159
MyVar = Round(pi, 2) 'MyVar conta ...



保留2位小数,无论它是什么型的都不可能等于double的
难道float(5.00)能等于double(5.00)?
就算你Msgbox看的都是一样的字符串,那还是不相等的吧
也许你这么写可以过:
azbNum=cdbl(round(aksNum/aTotal,4)*100)
gzbNum=cdbl(gzbNum)
或者:
azbNum=round(aksNum/aTotal,4)*100
gzbNum=cdbl(gzbNum)
gzbNum=round(gzbNum,……)……


个人看法,不知道大家什么看法
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-5-29 00:18:26 | 只看该作者
原帖由 lyscser 于 2008-5-28 21:59 发表



保留2位小数,无论它是什么型的都不可能等于double的
难道float(5.00)能等于double(5.00)?
就算你Msgbox看的都是一样的字符串,那还是不相等的吧
也许你这么写可以过:
azbNum=cdbl(round(aksNum/aTotal, ...


你没有仔细看我上面写的例子么。。。
按照你的写法,gzbNum一定是为0,而azbNum为某个数字,怎么可能相等。。。

vbs不像C,Java等变量是强类型,它对于类型并没有一个严格的强制界定

或者说变量让你迷惑了,那么我们来看更简单的例子
MsgBox 4=4.000000000
自己执行下看看吧,是True还是False
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2008-5-29 17:57:01 | 只看该作者
这个问题我也遇到了,今天我还以为是if语句出了问题,气得不行,我是两个字符串比较做为if条件,
     
       if strcomp("a",stingship(i))=0 then   
       ’stingship(i)是从页面的weblist中取的值,
          msgbox(xxx)
          xxxx
          elseif xxx   then
         xxx
         else
         xxxx
        end if
结果它把每个if都执行了一遍,这个气
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2008-5-29 23:13:19 | 只看该作者
原帖由 hsjzfling 于 2008-5-29 00:18 发表


你没有仔细看我上面写的例子么。。。
按照你的写法,gzbNum一定是为0,而azbNum为某个数字,怎么可能相等。。。

vbs不像C,Java等变量是强类型,它对于类型并没有一个严格的强制界定

或者说变量让你迷惑了 ...


疯了……写了半天的分析全搞丢了……
Msgbox本就支持Int的,呵呵

我发现楼主的最后两个If写的有问题:
aTotoal = 45,azbNum = 0.2222 ==>aksNum = 10
如果第一个MsgBox不执行,则第二个执执行,如果第二个不执行,则第一个必执行;结果是怎么着都是一个“不对”,不知道楼主意图如何
反正觉得循环体内有漏洞,没有时间细看,呵呵,有应用界面就好办多了
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2008-5-31 10:51:05 | 只看该作者
原帖由 lyscser 于 2008-5-29 23:13 发表


疯了……写了半天的分析全搞丢了……
Msgbox本就支持Int的,呵呵

我发现楼主的最后两个If写的有问题:
aTotoal = 45,azbNum = 0.2222 ==>aksNum = 10
如果第一个MsgBox不执行,则第二个执执行,如果第二个 ...


晕,你怎么能把我的程序看成是这个意思呢。。。。

我最后改成这样就可以通过了
azbNum=round((aksNum/aTotal)*100,2)
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2008-5-31 10:52:06 | 只看该作者
原帖由 xiatian831621 于 2008-5-29 17:57 发表
这个问题我也遇到了,今天我还以为是if语句出了问题,气得不行,我是两个字符串比较做为if条件,
     
       if strcomp("a",stingship(i))=0 then   
       ’stingship(i)是从页面的weblist中取的值,
     ...


你的是什么问题啊?没明白
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-15 02:11 , Processed in 0.080000 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表