AU3版本号比对
思路是,先分割版本号到数组,然后提取第一组数据转换成整数比对,如果一样继续循环,后面数据转换成小数比对
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | Func _CompareVersions($s_Vers1, $s_Vers2) ;版本号比对 ;如果$s_Vers2版本号大于$s_Vers1,返回为真, 否则为假 Local $i, $i_Vers1, $i_Vers2, $length Local $a_Vers1 = StringSplit($s_Vers1, '.') ;拆分版本号,到数组 Local $a_Vers2 = StringSplit($s_Vers2, '.') ;拆分版本号,到数组 $length = $a_Vers1[0] ;取长度 If $a_Vers1[0] < $a_Vers2[0] Then $length = $a_Vers2[0] ;如果版本2长度大于版本1,则长度取版本2 EndIf For $i = 1 To $length If $i = 1 Then ;如果为1,则提取第一组数据,转换成整数,然后比对大小 $i_Vers1 = Int($a_Vers1[$i]) ;转换成整数 $i_Vers2 = Int($a_Vers2[$i]) ;转换成整数 Else $i_Vers1 = 0 ;后面数据,先设定为0 $i_Vers2 = 0 If $i <= $a_Vers1[0] Then $i_Vers1 = Number("." & $a_Vers1[$i]) ;如果版本1的长度,在循环$i内,则取$i_Vers1值(前面加小数,好比较),否则为0 EndIf If $i <= $a_Vers2[0] Then $i_Vers2 = Number("." & $a_Vers2[$i]) ;如果版本2的长度,在循环$i内,则取$i_Vers2值(前面加小数,好比较),否则为0 EndIf EndIf If $i_Vers1 > $i_Vers2 Then ;如果版本1提取的数据大于版本2,返回为假 $s_Return = False ExitLoop ElseIf $i_Vers1 < $i_Vers2 Then ;如果版本2提取的数据大于版本1,返回为真 $s_Return = True ExitLoop Else $s_Return = False ;版本一样,返回为假 EndIf Next Return $s_Return EndFunc |
2022年03月30日 上午9:41 沙发
Number(“.” & $a_Vers2[$i]) 这种有个bug 比如1.1.1 和1.01.1 版本其实一样的,但是这个比对就有问题
可以直接用Int($a_Vers1[$i])来避免