所以我试图将阵列分成两半,并且比我预期的更麻烦。 设置断点,我知道正在执行这些行" sz"(整数)设置为9.此代码将" rightSz"(整数)设置为4,这是什么我期待,但它也设置" leftSz"(整数)等于6.我不知道为什么它给了我这个,它在我的代码的后面部分引起了很多问题。
If sz Mod 2 = 1 Then
rightSz = sz / 2
leftSz = rightSz + 1
Else
leftSz = sz / 2
rightSz = sz / 2
End If
答案 0 :(得分:1)
代码似乎是正确的,它可能是变量标注的问题
这个会使leftSz == 5
和rightsz == 4
Sub test()
Dim sz As Long, leftsz As Long, rightsz As Long
sz = 9
If sz Mod 2 = 1 Then
rightsz = sz / 2
leftsz = rightsz + 1
Else
leftsz = sz / 2
rightsz = sz / 2
End If
End Sub
答案 1 :(得分:1)
这是另一种方法,使用Int()
函数将原始数字的一半向下舍入为整数。另一半是通过计算与原始的差异来计算的。如果人们不熟悉Mod
,可能会稍微有点混乱。
Public Sub TestSplitArray()
Dim sz As Integer
Dim intPart1 As Integer
Dim intPart2 As Integer
sz = 9
intPart1 = Int(sz / 2)
intPart2 = sz - intPart1
Debug.Print "sz=(" & intPart1 & "+" & intPart2 & ")"
End Sub
另请注意,/
与\
在VBA中划分时不同。正斜杠返回分数,而反斜杠返回整数。使用此概念,您可以使用反斜杠而不是Int()
函数来产生相同的结果。
Public Sub TestSplitArray()
Dim sz As Integer
Dim intPart1 As Integer
Dim intPart2 As Integer
sz = 9
intPart1 = sz \ 2
intPart2 = sz - intPart1
Debug.Print "sz=(" & intPart1 & "+" & intPart2 & ")"
End Sub