主题:!!!!求助!!!!一个VB小问题
yangxiaole404
[专家分:0] 发布于 2008-04-04 22:13:00
帮个忙,看看这个小问题能解决不
在VB有2个text。。。分别输入两个很大的整数(例如50多位的)。。。。。怎么样比较他们的大小啊。。。。。
回复列表 (共8个回复)
沙发
yaozheng [专家分:28410] 发布于 2008-04-04 22:25:00
比方说,先比较两个框的内容哪个长度长,长的那个肯定数字也是大的。如果一样长,那就从第一个数字开始依次往下比,比到哪个大了,就是整个数字大了!
板凳
singlion [专家分:690] 发布于 2008-04-04 22:41:00
首先把开头可能出现的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 楼
singlion [专家分:690] 发布于 2008-04-04 22:42:00
晚一步啊,晕
4 楼
老大徒伤悲 [专家分:29120] 发布于 2008-04-05 08:11:00
二楼的方案比较周密。
还要补充,除了前导零,还有前导空格也要除掉。
后导非数目字一样去掉。
然后再比较长短,长的大;相同是从首位找到差异一位位置,决定大小;到头没差异判定相等。
5 楼
tjestar [专家分:3520] 发布于 2008-04-05 14:36:00
'这是偶刚刚写的一个比较函数,没经过优化不过效果还可以
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 楼
tjestar [专家分:3520] 发布于 2008-04-05 14:37:00
'/**************** 比较两个数字 **********************
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 楼
andywenming [专家分:0] 发布于 2008-04-07 03:13:00
请问,上楼的朋友.为什么我把你前面的代码全部复制进去了.可还是不行..编译不出来.
8 楼
tjestar [专家分:3520] 发布于 2008-04-09 09:15:00
上面的代码我又修改过了,修正了一些错误!你在编译时有什么错误你可以贴上来大家看看!
我来回复