= 6000 * 0.04 B = 6000 * 0.08 C = 6000 * 0.14 D = 6000 * 0.16 E = 6000 * 0.2 F = 6000 * 0.25 G = 6000 * 0.3============= 这是做啥子?
楼主你对基本的语法理解错了,像这种语句中的 If 6000 < xiaoseou <= 12000 Then 中的表达式 6000 < xiaoseou <= 12000 不是学数学时那种意思,你应该表示为 If (6000 < xiaoseou ) and (xiaoseou <= 12000) then
再解释一下,你写的If 6000 < xiaoseou <= 12000 Then这种是按表达式顺序从左到右执行逻辑判断,先是判断 6000 < xiaoseou,结果为True,这对应数字-1,再判断这个结果-1<= 12000 ,这自然结果也是True,所以你输入的所有大于6000的数,事实上都是符合 If 6000 < xiaoseou <= 12000 Then 这个条件的,执行的是同样的算法,所以错了.你在那句设个断点单步跟踪,就会看得很明显了:)
这个用数据库设置好一些,要不然分段变化了,那不是要重新修改程序,明白点说,以后老板说, 销售额低于5000,提成0.04。5000到10000之间部分提成0.08,10000到15000部分,提成0.14,等等,你要不要修改程序所以建议你建立一个表,销售额从多少到多少,提成比例是多少, create table tabname ( num1 number(12,2); --提成起始量 num2 number(12,2); --提成截止量 ration number(12,2)--提成比率 )计算的时候一个sql语句就找到提成比率了 select 提成比例 from tabname where 销售额>=num1 and 销售额<num2
楼主试试这个函数: Private Function getTiChen(ByVal m#) As Long Dim i&, arrX#(0 To 7), arrB&(0 To 7) arrX(0) = 0.04: arrB(0) = 780 arrX(1) = 0.08: arrB(1) = 1260 arrX(2) = 0.12: arrB(2) = 1980 '如果 arrX(2) = 0.14 是正确的 '后面的数据全部增加 120 arrX(3) = 0.16: arrB(3) = 2940 arrX(4) = 0.2: arrB(4) = 4140 arrX(5) = 0.25: arrB(5) = 5640 arrX(6) = 0.3: arrB(6) = 7440 arrX(7) = 0.35: arrB(7) = 9540 i = CLng(m) \ 6000: If (i > 7) Then i = 7 getTiChen = (m - i * 6000) * arrX(i) + arrB(i) End Function调用时,入口参数就是销售额。
增加 120 的是指 arrB() 的值。别把 arrX() 的数值也加120了…… ^_^
Private Sub Command1_Click() Dim xiaoseou As Long Dim x As Long Dim y As Long A = 6000 * 0.04 B = 6000 * 0.08 c = 6000 * 0.14 D = 6000 * 0.16 E = 6000 * 0.2 F = 6000 * 0.25 g = 6000 * 0.3 xiaoseou = InputBox("请输入销售额:") If xiaoseou <= 6000 Then y = xiaoseou * 0.04 x = y + 780 Print "你本月的工资为"; x ElseIf xiaoseou > 6000 And xiaoseou <= 12000 Then y = (xiaoseou - 6000) * 0.08 + A x = y + 780 Print "你本月的工资为"; x ElseIf xiaoseou > 12000 And xiaoseou <= 18000 Then '(此步开始和手工计算不符合) y = (xiaoseou - 12000) * 0.14 + B + A x = y + 780 Print "你本月的工资为"; x ElseIf xiaoseou > 18000 And xiaoseou <= 24000 Then y = (xiaoseou - 18000) * 0.16 + c + B + A x = y + 780 Print "你本月的工资为"; x ElseIf xiaoseou > 24000 And xiaoseou <= 30000 Then y = (xiaoseou - 24000) * 0.2 + D + c + B + A x = y + 780 Print "你本月的工资为"; x ElseIf xiaoseou > 30000 And xiaoseou <= 36000 Then y = (xiaoseou - 30000) * 0.25 + E + D + c + B + A x = y + 780 Print "你本月的工资为"; x ElseIf xiaoseou > 36000 And xiaoseou <= 42000 Then y = (xiaoseou - 36000) * 0.3 + F + E + D + c + B + A x = y + 780 Print "你本月的工资为"; x ElseIf xiaoseou > 42000 Then y = (xiaoseou - 42000) * 0.35 + g + F + E + D + c + B + A x = y + 780 Print "你本月的工资为"; x End If End Sub
教你一个办法,即使界限和提成比例变了,照样可用:Dim lngStandards(1, 7) As LonglngStandards(0, 0) = 0:lngStandards(1, 0) = 4 lngStandards(0, 1) = 6000:lngStandards(1, 1) = 8 lngStandards(0, 2) = 12000:lngStandards(1, 2) = 14 lngStandards(0, 3) = 18000:lngStandards(1, 3) = 16 lngStandards(0, 4) = 24000:lngStandards(1, 4) = 20 lngStandards(0, 5) = 30000:lngStandards(1, 5) = 25 lngStandards(0, 6) = 36000:lngStandards(1, 6) = 30 lngStandards(0, 7) = 42000:lngStandards(1, 7) = 35以上部分,你可以做一个程序界面来填写。然后,保存起来。启动时可以加载。下面是关键的计算:Dim sngSales As Single, sngTips As Single, sngAward As Single, i As Integer Dim curSalary As CurrencyFor i = Ubound(lngStandards) To Lbound(lngStandards) Step -1 If lngSales > lngStandards(0, i) Then sngTips = lngSales - lngStandards(0, i) sngTips = sngTips * lngStandards(1, i) sngTips = sngTips / 100 sngAward = sngAward + sngTips lngSales = lngStandards(0, i) End If Next icurSalary = 780 + sngAwardMsgBox "你的工资是 " & Format(curSalary, "standard")
B = 6000 * 0.08
C = 6000 * 0.14
D = 6000 * 0.16
E = 6000 * 0.2
F = 6000 * 0.25
G = 6000 * 0.3============= 这是做啥子?
If 6000 < xiaoseou <= 12000 Then
中的表达式
6000 < xiaoseou <= 12000
不是学数学时那种意思,你应该表示为
If (6000 < xiaoseou ) and (xiaoseou <= 12000) then
6000 < xiaoseou,结果为True,这对应数字-1,再判断这个结果-1<= 12000 ,这自然结果也是True,所以你输入的所有大于6000的数,事实上都是符合
If 6000 < xiaoseou <= 12000 Then
这个条件的,执行的是同样的算法,所以错了.你在那句设个断点单步跟踪,就会看得很明显了:)
销售额低于5000,提成0.04。5000到10000之间部分提成0.08,10000到15000部分,提成0.14,等等,你要不要修改程序所以建议你建立一个表,销售额从多少到多少,提成比例是多少,
create table tabname
(
num1 number(12,2); --提成起始量
num2 number(12,2); --提成截止量
ration number(12,2)--提成比率
)计算的时候一个sql语句就找到提成比率了
select 提成比例 from tabname where 销售额>=num1 and 销售额<num2
Private Function getTiChen(ByVal m#) As Long
Dim i&, arrX#(0 To 7), arrB&(0 To 7)
arrX(0) = 0.04: arrB(0) = 780
arrX(1) = 0.08: arrB(1) = 1260
arrX(2) = 0.12: arrB(2) = 1980
'如果 arrX(2) = 0.14 是正确的
'后面的数据全部增加 120
arrX(3) = 0.16: arrB(3) = 2940
arrX(4) = 0.2: arrB(4) = 4140
arrX(5) = 0.25: arrB(5) = 5640
arrX(6) = 0.3: arrB(6) = 7440
arrX(7) = 0.35: arrB(7) = 9540
i = CLng(m) \ 6000: If (i > 7) Then i = 7
getTiChen = (m - i * 6000) * arrX(i) + arrB(i)
End Function调用时,入口参数就是销售额。
^_^
Private Sub Command1_Click()
Dim xiaoseou As Long
Dim x As Long
Dim y As Long
A = 6000 * 0.04
B = 6000 * 0.08
c = 6000 * 0.14
D = 6000 * 0.16
E = 6000 * 0.2
F = 6000 * 0.25
g = 6000 * 0.3
xiaoseou = InputBox("请输入销售额:")
If xiaoseou <= 6000 Then
y = xiaoseou * 0.04
x = y + 780
Print "你本月的工资为"; x
ElseIf xiaoseou > 6000 And xiaoseou <= 12000 Then
y = (xiaoseou - 6000) * 0.08 + A
x = y + 780
Print "你本月的工资为"; x
ElseIf xiaoseou > 12000 And xiaoseou <= 18000 Then '(此步开始和手工计算不符合)
y = (xiaoseou - 12000) * 0.14 + B + A
x = y + 780
Print "你本月的工资为"; x
ElseIf xiaoseou > 18000 And xiaoseou <= 24000 Then
y = (xiaoseou - 18000) * 0.16 + c + B + A
x = y + 780
Print "你本月的工资为"; x
ElseIf xiaoseou > 24000 And xiaoseou <= 30000 Then
y = (xiaoseou - 24000) * 0.2 + D + c + B + A
x = y + 780
Print "你本月的工资为"; x
ElseIf xiaoseou > 30000 And xiaoseou <= 36000 Then
y = (xiaoseou - 30000) * 0.25 + E + D + c + B + A
x = y + 780
Print "你本月的工资为"; x
ElseIf xiaoseou > 36000 And xiaoseou <= 42000 Then
y = (xiaoseou - 36000) * 0.3 + F + E + D + c + B + A
x = y + 780
Print "你本月的工资为"; x
ElseIf xiaoseou > 42000 Then
y = (xiaoseou - 42000) * 0.35 + g + F + E + D + c + B + A
x = y + 780
Print "你本月的工资为"; x
End If
End Sub
教你一个办法,即使界限和提成比例变了,照样可用:Dim lngStandards(1, 7) As LonglngStandards(0, 0) = 0:lngStandards(1, 0) = 4
lngStandards(0, 1) = 6000:lngStandards(1, 1) = 8
lngStandards(0, 2) = 12000:lngStandards(1, 2) = 14
lngStandards(0, 3) = 18000:lngStandards(1, 3) = 16
lngStandards(0, 4) = 24000:lngStandards(1, 4) = 20
lngStandards(0, 5) = 30000:lngStandards(1, 5) = 25
lngStandards(0, 6) = 36000:lngStandards(1, 6) = 30
lngStandards(0, 7) = 42000:lngStandards(1, 7) = 35以上部分,你可以做一个程序界面来填写。然后,保存起来。启动时可以加载。下面是关键的计算:Dim sngSales As Single, sngTips As Single, sngAward As Single, i As Integer
Dim curSalary As CurrencyFor i = Ubound(lngStandards) To Lbound(lngStandards) Step -1
If lngSales > lngStandards(0, i) Then
sngTips = lngSales - lngStandards(0, i)
sngTips = sngTips * lngStandards(1, i)
sngTips = sngTips / 100
sngAward = sngAward + sngTips
lngSales = lngStandards(0, i)
End If
Next icurSalary = 780 + sngAwardMsgBox "你的工资是 " & Format(curSalary, "standard")
wsz1997提出的思维方法特别棒,真的,估计您是一位特立独行的高手。我同样谢谢你!
chen8013说的函数意思我懂,我觉得思维不同,程序的境界真的不一样。我基础太差了。谢谢你!
chinaboyzyq ,嘿嘿,您直接帮我改了程序,我复制就可以用。不过我还是自己认真重新敲了程序。我觉得我得对得起您的认真,谢谢你!
of123,佩服,又是一个全新的思维,而且解释清楚,感谢,感谢。
你们几位让初学程序的我明白,高手太多,而且风格各不相同。没有最好的方法,只有最恰当的解决问题的优秀思维。
所以,我决定,分平均分。虽然寒碜了点,但仅仅是为了表示我心理上的感谢。相信各位高手并不在乎这点分的。
再次表示感谢,因为工作的关系,也许我永远达不到程序的高手境界,但我会永远谢谢您会在我学习程序初期的热心帮助,谢谢您们!