nn是100的随机数.
当nn<2 -- nn = 2
4,5,10这些数道理同上,必须用Select case 方法
nn = Int(100)
Select Case nn
Case Is <= 10
nn = 10
Case 10.1 To 15
nn = 15
Case 15.1 To 20
nn = 20
Case 20.1 To 25
nn = 25
Case Else
End Select
请问各位大侠的问题是.
当nn >10 且 nn<=30时
进位档有15,20,25,30档,不用Select case方法.
当nn > 30 进位档有40,50,60,70,80,90.100
也就是没有45,55,65,75,85,95谢谢各位大侠
当nn<2 -- nn = 2
4,5,10这些数道理同上,必须用Select case 方法
nn = Int(100)
Select Case nn
Case Is <= 10
nn = 10
Case 10.1 To 15
nn = 15
Case 15.1 To 20
nn = 20
Case 20.1 To 25
nn = 25
Case Else
End Select
请问各位大侠的问题是.
当nn >10 且 nn<=30时
进位档有15,20,25,30档,不用Select case方法.
当nn > 30 进位档有40,50,60,70,80,90.100
也就是没有45,55,65,75,85,95谢谢各位大侠
当nn = 10.1 时 nn = 15
当nn = 17.2 nn =2010进位
当nn = 35 时 nn = 40
当nn = 51.35 时 nn = 60
Private Sub Command1_Click()
Dim nn As Integer, i As Integer
nn = 11
If nn > 10 And nn <= 30 Then
For i = 10 To 30 Step 5
If nn = i Then
MsgBox nn
Exit For
ElseIf nn < i Then
nn = i
MsgBox nn
Exit For
End If
Next
End If
'当nn >10 且 nn<=30时
'进位档有15,20,25,30档,不用Select case方法.
End Sub
Private Sub Command1_Click()
Dim nn As Single, i As Integer
nn = 51.35
If nn > 10 And nn <= 30 Then
For i = 10 To 30 Step 5
If nn <= i Then
nn = i
MsgBox nn
Exit For
End If
Next
ElseIf nn > 30 Then
For i = 30 To 100 Step 10
If nn <= i Then
nn = i
MsgBox nn
Exit For
End If
Next End If
'当nn >10 且 nn<=30时
'进位档有15,20,25,30档,不用Select case方法.' 当nn > 30 进位档有40,50,60,70,80,90.100
'也就是没有45 , 55, 65, 75, 85, 95End Sub
发此帖时,个人的思路是
int(15/10 ) 得到一个倍数 --- nn =1
15.1- 10 * nn 判读其是否 > 5 还是 < 5 这种算法与Select case比 没有进行简单.
'一点没想到大侠的
For i = 10 To 30 Step 5
Step 5 的解法.谢谢大侠的算法,简单明了,需要消化理解.
Function GetValue(n As Double, m As Long) As Long
Dim x As Long
Dim y As Double
x = (n \ 10) * 10
y = n - x
If y > 0 And y <= m Then
y = m
ElseIf y > m Then
y = 10
End If
GetValue = x + y
End Function
Private Sub Command1_Click()
Dim n As Double
Randomize
n = Rnd * 100
Debug.Print n
n = Switch(n <= 10, 10, _
n <= 30, GetValue(n, 5), _
n <= 100, GetValue(n, 10))
Debug.Print n
End Sub
也可以不用swith函数,用select case语句.....
Dim n As Double
Randomize
n = Rnd * 100
Debug.Print n
Select Case n
Case Is <= 10
n = 10
Case 10 To 30
n = GetValue(n, 5)
Case 30 To 100
n = GetValue(n, 10)
End Select
Debug.Print n
GetValue没有用过.For i = 10 To 30 Step 5用法比较常用,便于理解.
谢谢,看错了,GetValue是自定义函数. 从这种写法以为是内置函数,在网上找了半天没找到,理解了半天没有理解到位,对不起了.谢谢指教.Function GetValue(n As Double, m As Long) As Long
Dim x As Long
Dim y As Double
x = (n \ 10) * 10
y = n - x
If y > 0 And y <= m Then
y = m
ElseIf y > m Then
y = 10
End If
GetValue = x + y
End Function
Dim i&, j&
Randomize
For i = 1 To 20 '产生20个数进行测试
j = Rnd() * 100
Debug.Print j, ValueEx(j)
Next
End Sub' 参数变换函数
Private Function ValueEx(ByVal num As Long) As Long
num = (num + 4) \ 5
If (num > 2) Then
If (num > 6) Then
ValueEx = ((num + 1) \ 2) * 10
Else
ValueEx = num * 5
End If
Else
ValueEx = 10
End If
End Function
Sub Main()
Dim i&
For i = 1 To 100
Debug.Print i, ValueEx(i)
Next
End Sub
Dim x As Double
Dim y As Long nn = rnd * 100
x = n / 5
Select Case x 'nn<=10
Case Is <= 2
nn = 10
Case 2 To 6 'nn=10~30
y = nn \ 5
nn = y * 5 - (x <> y) * 5 '非5倍数,整除5后再加5
Case Else: 'nn>30
x = nn / 10
y = nn \ 10
nn = y * 10 - (x <> y) * 10 ''非10倍数,整除10后再加10
End Select
VB code
Sub Main()
Dim i&, j&
Randomize
For i = 1 To 20 '产生20个数进行测试
j = Rnd() * 100
Debug.Print j, ValueEx(j)
Next
End Sub谢谢回复,又学到一个知识点.Visual Basic 语言参考
\ 运算符--------将两个数相除并返回以整数形式表示的结果。Mod 运算符 (Visual Basic)-------将两个数相除并只返回余数。请问\与mod 有何区别---在这里为什么要用\ 而不用Mod.