Private Sub Command4_Click()
On Error GoTo ErrHandle
Dim sc As Object
Set sc = CreateObject("ScriptControl")
sc.Language = "VBScript"
MsgBox sc.Eval(List1.Text), 64, "YE"
Set sc = Nothing
Exit Sub
ErrHandle: '错误处理
MsgBox "程序出错 " & vbCrLf & "错误号: " & Err.Number & vbCrLf & "请输入正确算式! ", vbCritical Or vbOKOnly, "出错" 'Err.Description
End Sub
现在这个代码是我在list中输入“1+2-3+4”然后点击这个Command4那么MsgBox弹出计算结果4
如果我把一个数据用代码表示呢,或用代码表示一个运算方式呢
如我有数据a=16,计算符e(求前面计算结果每位数的和)
如我输入1+a-2e+13e,然后点击Command4,这时的计算方式为1+16-2=15取1和5的和是6,然后+13,计算结果19,取1和9的和10,最后的结果是MsgBox弹出10,这个代码该如何写

解决方案 »

  1.   


    '大哥 你的数学有那么烂吗?不会给算术表达式加上括号吗?
    x = ((1+a-2)e+13)e

    x = 1+a-2e+13e
    一样吗?
    private sub xxx(byval x as string)
    如果x是数字?
       如果x(e)中的x三位数或以上呢?x是1位数?又或者x(e)的x是个负数,小数呢?
    如果x是字符串?
       异常怎么抛?
    end sub
      

  2.   

    楼上老师批评的对,原定是按照由左往右的顺序计算所以有没有括号都没关系,这样看来加上括号也很好,负数全部换成绝对值,有小数的取整数,请问这个代码怎么写,最主要的是我想知道a=?和e=?然后在计算的时候能辨认出来,现在就拿a=14,e=(计算和值)这两个条件计算,
    其他的条件以后再加
      

  3.   

    ScriptControl 不支持代数运算。需要你现行代码处理。如果你写 1+a-2*e+13*e,只需简单地:strTmp = List1.Text
    strTmp = Replace(strTmp, "a", CStr(a))
    strTmp = Replace(strTmp, "e", CStr(e))如果你省略乘号,就需要在替换前将需要补乘号的地方补上。
      

  4.   

    你要求 15e = (15\10)+(15 mod 10),而其它的 +- 运算又是中缀表达式,无法实现。
      

  5.   

    你要求 15e = (15\10)+(15 mod 10),是后缀表达式;而其它的 +- 运算又是中缀表达式,无法实现。