回 帖 发 新 帖 刷新版面

主题:!!!!求助!!!!一个VB小问题

帮个忙,看看这个小问题能解决不
在VB有2个text。。。分别输入两个很大的整数(例如50多位的)。。。。。怎么样比较他们的大小啊。。。。。

回复列表 (共8个回复)

沙发

比方说,先比较两个框的内容哪个长度长,长的那个肯定数字也是大的。如果一样长,那就从第一个数字开始依次往下比,比到哪个大了,就是整个数字大了!

板凳

首先把开头可能出现的0去掉,
然后比较长度,长度大的明显数字就大
如果长度相同,则比较最高位,如果最高位相同,则比较下一位,以此类推

function f1(t1 as string,t2 as string)as long'前者大返回1,后者大返回-1,相等返回0 
dim i as long,n1 as integer,n2 as integer
do while left(t1,1)="0" 
  t1=mid(t1,2,len(t1)-1)
loop
do while left(t2,1)="0" 
  t2=mid(t2,2,len(t2)-1)
loop
if len(t1)>len(t2) then f1=1
elseif len(t1)<len(t2) then f2=-1
else
   for i=1 to len(t1)
      n1=val(mid(t1,i,1)):n2=val(mid(t2,i,1))
      if n1>n2 then f1=1:exit function
      elseif n1<n2 then f1=-1:exit function
      else
         if i=len(t1) then 
             f1=0
             exit function
         end if
      end if
   next
end if
end function

3 楼

晚一步啊,晕

4 楼

二楼的方案比较周密。
还要补充,除了前导零,还有前导空格也要除掉。
          后导非数目字一样去掉。
然后再比较长短,长的大;相同是从首位找到差异一位位置,决定大小;到头没差异判定相等。

5 楼

'这是偶刚刚写的一个比较函数,没经过优化不过效果还可以
Public Function isMax(strNum1 As String, strNum2 As String)
    Dim strZheng1 As String
    Dim strXiao1 As String
    Dim strZheng2 As String
    Dim strXiao2 As String
    Dim lIndex As Long
    Dim strTmp1 As String
    Dim strTmp2 As String
    Dim strNumber As String
    
 '   Dim strNum1 As String
 '   Dim strNum2 As String
    
    If strNum1 = "" Or strNum2 = "" Then
'        Exit Function
    End If
    isMax = -1
    
    '/*********分解数值的整数与小数部分***********
    strTmp1 = Trim(strNum1)
    For lIndex = 1 To Len(strTmp1)
        If Mid(strTmp1, lIndex, 1) <> "0" Then
            If Mid(strTmp1, lIndex, 1) = "-" Then
                strNumber = "-"
            Else
                strTmp1 = strNumber & Mid(strTmp1, lIndex, Len(strTmp1))
                Exit For
            End If
        End If
    Next
    
    strTmp2 = Trim(strNum2)
    For lIndex = 1 To Len(strTmp2)
        If Mid(strTmp2, lIndex, 1) <> "0" Then
            If Mid(strTmp1, lIndex, 1) = "-" Then
                strNumber = "-"
            Else
            
                strTmp2 = strNumber & Mid(strTmp2, lIndex, Len(strTmp2))
                Exit For
            End If
        End If
    Next
            
    lIndex = InStr(1, strTmp1, ".", vbTextCompare)
    If lIndex <> 0 Then
            strZheng1 = Mid(strTmp1, 1, lIndex - 1)
            strXiao1 = Mid(strTmp1, (lIndex + 1), Len(strTmp1))
    Else
        strZheng1 = strTmp1
    End If
    
    lIndex = InStr(2, strTmp2, ".", vbTextCompare)
    If lIndex <> 0 Then
        strZheng2 = Mid(strTmp2, 1, lIndex - 1)
        strXiao2 = Mid(strTmp2, (lIndex + 1), Len(strTmp2))
    Else
        strZheng2 = strTmp2
    End If
    
    '/**************** 分解完毕 ************************

6 楼

    '/**************** 比较两个数字 **********************
    If Mid(strZheng1, 1, 1) = "-" And Mid(strZheng2, 1, 1) = "-" Then                   '两个数都为负数
        Select Case isMax(Mid(strZheng1, 2, Len(strZheng1)), Mid(strZheng2, 2, Len(strZheng2)))
            Case 1              '第一个数值大那么第2个就是大数
                isMax = 2
            Case 2              '第二个数值大那么第1个就是大数
                isMax = 1
            Case 0              '整数部分一样大,开始比较小数部分
                Select Case isMax(strXiao1, strXiao2)
                    Case 1
                        isMax = 2
                    Case 2
                        isMax = 1
                    Case 0
                        isMax = 0
                    Case -1
                        isMax = -1
                End Select
                
            Case -1             '比较出错
                    isMax = -1
                    
        End Select
        Exit Function
    ElseIf Mid(strZheng1, 1, 1) = "-" And Mid(strZheng2, 1, 1) <> "-" Then              '第1个为负数,第二个为正数则第二个大
        isMax = 2
        Exit Function
    ElseIf Mid(strZheng1, 1, 1) <> "-" And Mid(strZheng2, 1, 1) = "-" Then              '第1个数正数,第二个数负数则第一个大
        isMax = 1
        Exit Function
    End If
    
    '***********开始数值比较*****************
    If Len(strZheng1) > Len(strZheng2) Then
        isMax = 1
    ElseIf Len(strZheng1) < Len(strZheng2) Then
        isMax = 2
    ElseIf Len(strZheng1) = Len(strZheng2) Then
        For lIndex = 1 To Len(strZheng1)
            If Val(Mid(strZheng1, lIndex, 1)) > Val(Mid(strZheng2, lIndex, 1)) Then
                isMax = 1
                Exit Function
            ElseIf Val(Mid(strZheng1, lIndex, 1)) < Val(Mid(strZheng2, lIndex, 1)) Then
                isMax = 2
                Exit Function
            End If
        Next
        If strXiao1 = "" And strXiao2 = "" Then
            isMax = 0
            Exit Function
        End If
        isMax = isMax(strXiao1, strXiao2)
    End If
End Function

7 楼

请问,上楼的朋友.为什么我把你前面的代码全部复制进去了.可还是不行..编译不出来.

8 楼

上面的代码我又修改过了,修正了一些错误!你在编译时有什么错误你可以贴上来大家看看!

我来回复

您尚未登录,请登录后再回复。点此登录或注册