本帖最后由 bcrun 于 2010-07-09 21:14:35 编辑

解决方案 »

  1.   

     = 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============= 这是做啥子?
      

  2.   

    楼主你对基本的语法理解错了,像这种语句中的
    If 6000 < xiaoseou <= 12000 Then
    中的表达式
    6000 < xiaoseou <= 12000
    不是学数学时那种意思,你应该表示为
    If (6000 < xiaoseou ) and (xiaoseou <= 12000) then
      

  3.   

    再解释一下,你写的If 6000 < xiaoseou <= 12000 Then这种是按表达式顺序从左到右执行逻辑判断,先是判断
    6000 < xiaoseou,结果为True,这对应数字-1,再判断这个结果-1<= 12000 ,这自然结果也是True,所以你输入的所有大于6000的数,事实上都是符合
    If 6000 < xiaoseou <= 12000 Then
    这个条件的,执行的是同样的算法,所以错了.你在那句设个断点单步跟踪,就会看得很明显了:)
      

  4.   

    这个用数据库设置好一些,要不然分段变化了,那不是要重新修改程序,明白点说,以后老板说,
    销售额低于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
      

  5.   

    楼主试试这个函数:
    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调用时,入口参数就是销售额。
      

  6.   

    增加 120 的是指 arrB() 的值。别把 arrX() 的数值也加120了……
    ^_^
      

  7.   


    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
      

  8.   


    教你一个办法,即使界限和提成比例变了,照样可用: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")
      

  9.   

    bcrun 解释清楚,而且非常容易懂,对我这种数学基础差,程序刚刚学的人很适用,我很谢谢你,你是一个良师!
    wsz1997提出的思维方法特别棒,真的,估计您是一位特立独行的高手。我同样谢谢你!
    chen8013说的函数意思我懂,我觉得思维不同,程序的境界真的不一样。我基础太差了。谢谢你!
    chinaboyzyq ,嘿嘿,您直接帮我改了程序,我复制就可以用。不过我还是自己认真重新敲了程序。我觉得我得对得起您的认真,谢谢你!
    of123,佩服,又是一个全新的思维,而且解释清楚,感谢,感谢。
    你们几位让初学程序的我明白,高手太多,而且风格各不相同。没有最好的方法,只有最恰当的解决问题的优秀思维。
    所以,我决定,分平均分。虽然寒碜了点,但仅仅是为了表示我心理上的感谢。相信各位高手并不在乎这点分的。
     再次表示感谢,因为工作的关系,也许我永远达不到程序的高手境界,但我会永远谢谢您会在我学习程序初期的热心帮助,谢谢您们!