问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VB怎么输入表达式计算得到结果?

发布网友 发布时间:2023-11-04 02:26

我来回答

2个回答

热心网友 时间:2024-12-13 17:48

  Function EvaluateB(ByRef Bdsz As String) As Double
        '思路:先计算括号内,再依次计算括号外。大多用拼音第一字母命名
        Dim LenBdsz As Integer   '计算表达式长度
        Dim LskhStr(3) As String      '临时括号值,即括号将原表达式分隔成三段 LskhStr(0)为总计算值
        Dim i, j As Integer
        On Error GoTo err1
        LskhStr(0) = StrConv(Trim(Bdsz), vbNarrow) '更换全角括号为半角
Xh:     '循环去括号
        LenBdsz = Len(LskhStr(0))
        i = InStr(LskhStr(0), ")")
        If i > 0 Then
            j = InStrRev(Mid(LskhStr(0), 1, i), "(")
            If j > 0 Then
                LskhStr(1) = Mid(LskhStr(0), 1, j - 1)
                LskhStr(2) = Mid(LskhStr(0), j + 1, i - j - 1)
                LskhStr(3) = Mid(LskhStr(0), i + 1, LenBdsz - i)
                LskhStr(2) = CalcB(Trim(LskhStr(2)))     '最内括号计算
                LskhStr(0) = LskhStr(1) & LskhStr(2) & LskhStr(3)
                GoTo Xh
            Else
                GoTo err1
            End If
        End If
        LskhStr(0) = CalcB(LskhStr(0))      'calc.Eval(LskhStr(0)).ToString
        Return LskhStr(0)
        Exit Function
err1:
        Return 0
    End Function
    
    
    Function CalcB(ByRef str1 As String) As String     '仅四则运算,+-*/无括号

        Dim Cn2 As String, Str2(4) As String
        Dim LenStr As Integer, i As Integer, j As Integer
        '''''''''''''''''''''''''''''''''''
Xh2:       '先计算"/"    此前可增加开方,乘方等优先计算符的计算
        LenStr = Len(str1)
        i = InStr(str1, "/")
        If i > 0 Then
            If i = 1 Or i = LenStr Then
                Return "表达式错误"
                Exit Function
            End If
            For j = i - 1 To 1 Step -1
                Cn2 = Mid(str1, j, 1)
                If Cn2 = "+" Or Cn2 = "-" Or Cn2 = "/" Or Cn2 = "*" Then
                    Str2(1) = Mid(str1, 1, j)
                    Str2(2) = Mid(str1, j + 1, i - j - 1)
                    Exit For
                End If
                If j = 1 Then
                    Str2(1) = ""
                    Str2(2) = Mid(str1, 1, i - 1)
                End If
            Next
            For j = i + 1 To LenStr
                Cn2 = Mid(str1, j, 1)
                If Cn2 = "+" Or Cn2 = "-" Or Cn2 = "/" Or Cn2 = "*" Then
                    Str2(3) = Mid(str1, i + 1, j - i - 1)
                    Str2(4) = Mid(str1, j, LenStr - j + 1)
                    Exit For
                End If
                If j = LenStr Then
                    Str2(3) = Mid(str1, i + 1, LenStr - i)
                    Str2(4) = ""
                End If
            Next
            str1 = Trim(Str2(1) & Trim(Str(Val(Trim(Str2(2))) / Val(Trim(Str2(3))))) & Trim(Str2(4)))
            GoTo Xh2
        End If

Xh1:
        LenStr = Len(str1)
        i = InStr(str1, "*")
        If i > 0 Then
            If i = 1 Or i = LenStr Then
                Return "表达式错误"
                Exit Function
            End If
            For j = i - 1 To 1 Step -1
                Cn2 = Mid(str1, j, 1)
                If Cn2 = "+" Or Cn2 = "-" Or Cn2 = "/" Or Cn2 = "*" Then
                    Str2(1) = Mid(str1, 1, j)
                    Str2(2) = Mid(str1, j + 1, i - j - 1)
                    Exit For
                End If
                If j = 1 Then
                    Str2(1) = ""
                    Str2(2) = Mid(str1, 1, i - 1)
                End If
            Next
            For j = i + 1 To LenStr
                Cn2 = Mid(str1, j, 1)
                If Cn2 = "+" Or Cn2 = "-" Or Cn2 = "/" Or Cn2 = "*" Then
                    Str2(3) = Mid(str1, i + 1, j - i - 1)
                    Str2(4) = Mid(str1, j, LenStr - j + 1)
                    Exit For
                End If
                If j = LenStr Then
                    Str2(3) = Mid(str1, i + 1, LenStr - i)
                    Str2(4) = ""
                End If
            Next
            str1 = Trim(Str2(1) & Trim(Str(Val(Trim(Str2(2))) * Val(Trim(Str2(3))))) & Trim(Str2(4)))
            GoTo Xh1
        End If

Xh4:
        LenStr = Len(str1)
        i = InStr(2, str1, "-")
        If i > 0 Then
            If i = LenStr Then
                Return "表达式错误"
                Exit Function
            End If
            For j = i - 1 To 1 Step -1
                Cn2 = Mid(str1, j, 1)
                If (Cn2 = "+" Or Cn2 = "-" Or Cn2 = "/" Or Cn2 = "*") And j > 1 Then
                    Str2(1) = Mid(str1, 1, j)
                    Str2(2) = Mid(str1, j + 1, i - j - 1)
                    Exit For
                Else
                    If j = 1 Then
                        Str2(1) = ""
                        Str2(2) = Mid(str1, 1, i - 1)
                    End If
                End If
            Next
            For j = i + 1 To LenStr
                Cn2 = Mid(str1, j, 1)
                If Cn2 = "+" Or Cn2 = "-" Or Cn2 = "/" Or Cn2 = "*" Then
                    Str2(3) = Mid(str1, i, j - i)
                    Str2(4) = Mid(str1, j, LenStr - j + 1)
                    Exit For
                End If
                If j = LenStr Then
                    Str2(3) = Mid(str1, i, LenStr - i + 1)
                    Str2(4) = ""
                End If
            Next
            If Mid(Str(Val(Str2(2)) + Val(Str2(3))), 1, 1) = "-" Then
                If Str2(1) <> "" Then
                    If Mid(Str2(1), Len(Str2(1)), 1) = "+" Then
                        Str2(1) = Mid(Str2(1), 1, Len(Str2(1)) - 1)
                    End If
                End If
            End If
            str1 = Trim(Str2(1) & Trim(Str(Val(Trim(Str2(2))) + Val(Trim(Str2(3))))) & Str2(4))
            GoTo Xh4
        End If
Xh3:
        LenStr = Len(str1)
        i = InStr(str1, "+")
        If i > 0 Then
            If i = 1 Or i = LenStr Then
                Return "表达式错误"
                Exit Function
            End If
            For j = i - 1 To 1 Step -1
                Cn2 = Mid(str1, j, 1)
                If Cn2 = "+" Or Cn2 = "-" Or Cn2 = "/" Or Cn2 = "*" Then
                    If Mid(str1, 1, 1) = "-" Then
                        Str2(1) = ""
                        Str2(2) = Mid(str1, 1, i - j)
                    Else
                        Str2(1) = Mid(str1, 1, j)
                        Str2(2) = Mid(str1, j + 1, i - j - 1)
                    End If
                    Exit For
                End If
                If j = 1 Then
                    Str2(1) = ""
                    Str2(2) = Mid(str1, 1, i - 1)
                End If
            Next
            For j = i + 1 To LenStr
                Cn2 = Mid(str1, j, 1)
                If Cn2 = "+" Or Cn2 = "-" Or Cn2 = "/" Or Cn2 = "*" Then
                    Str2(3) = Mid(str1, i + 1, j - i - 1)
                    Str2(4) = Mid(str1, j, LenStr - j + 1)
                    Exit For
                End If
                If j = LenStr Then
                    Str2(3) = Mid(str1, i + 1, LenStr - i)
                    Str2(4) = ""
                End If
            Next
            str1 = Trim(Str2(1) & Trim(Str(Val(Trim(Str2(2))) + Val(Trim(Str2(3))))) & Str2(4))
            GoTo Xh3
        End If
        Return str1
    End Function

热心网友 时间:2024-12-13 17:49

Private Sub Command1_Click()
Dim ex As String, res As String, calc As Object
Set calc = CreateObject("MSScriptControl.ScriptControl")
calc.Language = "vbscript"
ex = Text1.Text
rs = calc.Eval(ex)
Text2.Text = rs
End Sub
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
15份的摘抄,要短的我是写作业的,差不多一份要一张纸 肯定会给高分_百度... 补牙前怎么样杀神经? ...我妈让我把牙堵上,想知道是怎么堵?要是杀神经,具体流程是什么样的... 汽车电瓶断电开关断正极还是负极 汽车电瓶断电开关断正极吗 为什么汽车电瓶断电后要断开负极 亳州市教师资格证考哪些科目 请问在观澜坐哪路公交车去深圳大学 陈旧隙腔性脑梗塞能喝酒吗?要喝的话多少为好?谢谢……! 男女朋友分手,怎样消除房产证上女方的名字 ...加了女方的名字 现在女方要提出分手 这房子该怎么处理? 四种基本反应类型的分类依据是什么?10 Be,S,O,Br 四种元素组成的单质或者化合物反映生成沉淀...5 女孩名字陈思什么好听22 大女儿叫陈思为,小的叫陈思什么好听,男女都要。1 德州科技职业学院青岛校区好不好? 叶企孙PK爱因斯坦,谁更牛逼? 教师资格证准考证打印时间是哪天?会在几月份? 珠海私立小学哪个好一点3 设置微信墙后,给公众号发信息为什么上不了墙 运动过后小腿酸痛怎么办170 攀枝花交警协管员都做些什么工作1 沉淀形式有几种4 所有生成沉淀的化学反应20 请问珠海有哪些国际学校?哪间比较好11 python编程a=&#39;1+2&#39;eval(a+&#39;4.5&#39;)结果为什么是25.5? 运动后小腿酸痛怎么办?108 农行卡转账到信用卡上多久到账2 我忘记了支付密码 河北沧州有什么好玩的和好吃的? 为什么大四是「分手季」,但也是恋爱成功率最高的时候?2 联发科p70相当于骁龙多少 商标35类问题,如别人申请35类商标“张三银饰超市”我可以申... 自小身在富贵家,眼前万物总奢华,蒙君赐紫金,自由自在,猜一生...1 古代灯谜.自小生在富贵家,时常出入享荣华.万岁也曾传圣旨,代...12 自小生在富贵家,时常出入享荣华.万岁也曾传圣旨,代代儿孙作探...9 签诗:自小生在富贵家,眼前万物总奢华,蒙君赐紫金玉带,四海声...101 &quot;解签自小生在富贵家,眼前万物总奢华,要君赐受金鱼袋,四海传...15 我爸妈以前感情本来很好,去年我妈得知朋友(爸爸现在的情敌我管...4 crrole是什么牌子手表3 山西的神木是哪个地区的3 歌手陈粒这张图高清拿来当壁纸2 眼睛距离太近怎么化妆比较显得宽?14 如何建立一个股票量化交易模型并仿真?11 什么是量化投资交易策略5 女性怎么做,才能在职场中混得更好 一年内怎么改第二次 谁有好的少儿编程课程推荐吗?7 Q宠大乐斗帮战奖励什么?10 我妈好好的,我有个朋友竟然说说出要给我爸介绍一个这样的话,你... 女性在职场中的优势与劣势有哪些?52