怎么样算"1+2*3/4"的值

silverblade 2003-09-29 05:28:39
一个变量里面存的是类似"1+2*3/4"这样的可以计算的四则运算题,用什么简单的办法可以得到结果。请注意,要简单。如果是把这个字符串分割开再算接别说了。

引申出一个问题。怎么样再VB中运行类似脚本的东西。
比如一个变量中保存有:
dim a as integer
a=10
print a
这样的VB代码,怎么样在程序中运行?
...全文
118 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
go_my_sky 2004-02-13
  • 打赏
  • 举报
回复
高手啊,平时还自以为自己高手呢。才算见识了。
yuwenshen 2004-02-07
  • 打赏
  • 举报
回复
长知识!
TimCheng 2004-02-06
  • 打赏
  • 举报
回复
长知识!
vikingleo 2004-02-02
  • 打赏
  • 举报
回复
mark
zichen66 2004-01-30
  • 打赏
  • 举报
回复
moredog 2004-01-28
  • 打赏
  • 举报
回复
先乘除后加减!!
华芸智森 2004-01-27
  • 打赏
  • 举报
回复
up
简易无忌 2004-01-27
  • 打赏
  • 举报
回复
我通常用VB自带控件ScriptControl,用起来很简单:

计算结果=ScriptControl1.Eval(表达式)
chinaren502 2004-01-19
  • 打赏
  • 举报
回复
支持支持支持支持支持支持支持支持支持支持支持●●●●●●●●●支持支持支持
支持支持支持支持支持支持支持支持支持●●●●●●●●●●●●●●●支持支持
支持支持支持支持支持支持支持支支●●●●●●●●●●●●●●●●●支持支持
支持支持支持支持支持支●●●●支●●●●●●●●●●●支持支持支持支持支持
支持支持支持支持●●●●●●●支●●●支持●●●●●支持支持支持支持支支持
支持支●●●●●●●●●●●●支持支持支持●●●●支持支持支持支持支持支持
支●●●●●●●●●●●●●●支持支持支持●●●●支持支持支持支持支持支持
支●●●●●●●●●●●●支持支持支持支●●●●●●●●●●●支持支持支持
支●●●●●●●●●●●●支持支持支持●●●●●●●●●●●●●●支持支持
支持●●●●●●●●●●支持支持支●●●●●●支持支●●●●●●●支持支持
支持支持支持支持●●●●支持支持●●●●支持支持支持●●●●●支持支持支持
支持支持支持支持●●●●支持支持●●●●支持●●支持支●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●●支持●●●●持●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●●支持●●●●持●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●●支持●●●支持●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●●支持●●●支持●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●●支持●●●支持●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●●支●●●●支持●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●●无●●●●支持●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●●持●●●●支持●●●●●支持支持支
支持支持支持支持●●●●支持支持●●●支持●●●●支持●●●●●支持支持支
支持●●支持支●●●●●支持支持●●●支持●●●支持支●●●●●支持支持支
支持●●●●●●●●●●支持支持支●●支持●●支持支持●●●●●支持支持支
支持无●●●●●●●●●支持支持支持支持●●●支持支持支●●●●支持支持支
支持支持无●●●●●●●支持支持支持支持●●●支●●●●支持支持支持支持支
支持支持支持●●●●●●支持支持支持支●●●●支持●●●●●支持支持支持支
支持支持支持支持支●●●支持支持支持●●●●●支持支●●●●●●●支持支持
支持支持支持支持支持支持支持支持●●●●●●支持支持支●●●●●●支持支持
支持支持支持支持支持支持支持支●●●●●●支持支持支持●●●●●●●支持支
支持支持支持支持支持支持支持●●●●●支持支持支持支持支●●●●●●支持支
支持支持支持支持支持支持支●●●●●支持支持支持支持支持支●●●●支持支持
支持支持支持支持支持支持●●●支持支持支持支持支持支持支持支●●●支持支持
支持支持支持支持支持支●持支持支持支持支持支持支持支持支持支持●●支持支持
华芸智森 2004-01-19
  • 打赏
  • 举报
回复

'计算用户输入的表达式
'函数:MathCal
'参数:CalStr 一个数学表达式,如:23*45/9
'返回值:String,(如果成功,则返回计算结果,否则,返回 "ERR")
'例子:
Public Function MathCal(CalStr As String) As String
Dim I, N As Integer
Dim TempGs, Temp As String
Dim Vl() As String '操作数
Dim Vls As Integer '操作数的数目
Dim Si As Integer '上一操作符的位置
Dim Ads, Sus, Mus, Bys, Lks, Rks As Integer '操作符的数目
Dim Adp(), Mup(), Byp(), Lkp(), Rkp() As Integer '操作符的位置
Dim Adn(), Mun(), Byn() As Integer '操作符的排列次序
Dim Sig() As Integer '每一个操作符的位置

On Error GoTo Err

Do While True
ReDim Adp(Len(CalStr)), Mup(Len(CalStr)), Byp(Len(CalStr)) _
, Lkp(Len(CalStr)), Rkp(Len(CalStr)) As Integer
ReDim Adn(Len(CalStr)), Mun(Len(CalStr)), Byn(Len(CalStr)) _
, Lkn(Len(CalStr)), Rkn(Len(CalStr)), Sig(Len(CalStr)) As Integer

ReDim Vl(Len(CalStr))

If Len(CalStr) = 0 Then GoTo Err
If Mid$(CalStr, Len(CalStr), 1) <> "#" Then
TempGs = CalStr
For I = 1 To Len(CalStr) '将减化加
If Mid$(CalStr, I, 1) = "-" And I <> 1 Then
If Mid$(CalStr, I - 1, 1) <> "+" And Mid$(CalStr, I - 1, 1) <> "-" _
And Mid$(CalStr, I - 1, 1) <> "*" And Mid$(CalStr, I - 1, 1) <> "/" Then
TempGs = Mid$(TempGs, 1, I - 1 + N) + "+" + Mid$(CalStr, I)
N = N + 1
End If

End If
Next I
CalStr = TempGs

N = 0
For I = 1 To Len(CalStr) '处理负负得正
If Mid$(CalStr, I, 1) = "-" Then
If Mid$(CalStr, I + 1, 1) = "-" Then
TempGs = Mid$(TempGs, 1, I - 1 - N) + Mid$(CalStr, I + 2)
N = N + 2
End If
End If
Next I
CalStr = TempGs
CalStr = CalStr + "#"
End If

Vls = 1
Ads = 0: Sus = 0: Mus = 0: Bys = 0: Lks = 0: Rks = 0

For I = 1 To Len(CalStr)

Select Case Mid$(CalStr, I, 1)
Case "+"
Ads = Ads + 1
Adp(Ads) = I
Adn(Ads) = Vls
Case "*"
Mus = Mus + 1
Mup(Mus) = I
Mun(Mus) = Vls
Case "/"
Bys = Bys + 1
Byp(Bys) = I
Byn(Bys) = Vls
Case "("
Lks = Lks + 1
Lkp(Lks) = I

Case ")"
Rks = Rks + 1
Rkp(Rks) = I

End Select

If Mid$(CalStr, I, 1) = "+" Or Mid$(CalStr, I, 1) = "*" Or _
Mid$(CalStr, I, 1) = "/" Or Mid$(CalStr, I, 1) = "#" Then

If Si + 1 = I And Mid$(CalStr, I + 1, 1) <> "#" _
Then '操作符非法连续或以操作符开头
GoTo Err
Else
Si = I
End If

If Not IsNumeric(Vl(Vls)) And Mid$(CalStr, I + 1, 1) <> "#" _
Then '操作数不是数字
GoTo Err
End If
Sig(Vls) = I
Vls = Vls + 1

Else
If Mid$(CalStr, I, 1) <> "(" And Mid$(CalStr, I, 1) <> ")" Then
Vl(Vls) = Vl(Vls) + Mid$(CalStr, I, 1) '制作操作数
Else
If I <> 1 Then
If ((Mid$(CalStr, I - 1, 1) = "(" And Mid$(CalStr, I, 1) = ")") Or _
(Mid$(CalStr, I - 1, 1) = ")" And Mid$(CalStr, I, 1) = "(")) _
Then '判定括号前后符号的合法性
GoTo Err
End If
End If
End If
End If

Next I

If Lks <> Rks Then
GoTo Err '左右括号数是否匹配
End If

For I = 1 To Lks
If Lkp(I) > Rkp(I) Then GoTo Err '左右括号出现顺序错误
Next I

If Lks <> 0 Then '括号处理
Do While True
For I = Lks To 1 Step -1
For N = Rks To 1 Step -1
Temp = MathCal(Mid$(CalStr, Lkp(I) + 1, Rkp(N) - Lkp(I) - 1))
If Temp <> "ERR" Then
CalStr = Mid$(CalStr, 1, Lkp(I) - 1) + Temp + Mid$(CalStr, Rkp(N) + 1)
Exit Do
End If
Next N
Next I
If Temp = "ERR" Then GoTo Err
'/括号中有错误退出
Loop
Else
If Mus <> 0 Then '乘法处理
CalStr = Mid$(CalStr, 1, Sig(Mun(1) - 1)) + Trim$(Str(Val(Vl(Mun(1))) _
* Val(Vl(Mun(1) + 1)))) + Mid$(CalStr, Val(Mup(1)) + Len(Vl(Mun(1) _
+ 1)) + 1)
Else
If Bys <> 0 Then '除法处理
CalStr = Mid$(CalStr, 1, Sig(Byn(1) - 1)) + Trim$(Str(Val(Vl(Byn(1))) _
/ Val(Vl(Byn(1) + 1)))) + Mid$(CalStr, Val(Byp(1)) + Len(Vl(Byn(1) _
+ 1)) + 1)
Else
If Ads <> 0 Then '加法处理
CalStr = Trim$(Str(Val(Vl(1)) + Val(Vl(2)))) + Mid$(CalStr, Val(Adp(1)) _
+ Len(Vl(2)) + 1)
Else
MathCal = Mid$(CalStr, 1, Len(CalStr) - 1)
Exit Function
End If
End If
End If
End If
Loop

Err:
MathCal = "ERR"
End Function
gwhong211 2003-12-24
  • 打赏
  • 举报
回复
这很简单啊,不过要用到数据库,用SQL就搞定了。
hcj2002 2003-10-25
  • 打赏
  • 举报
回复
lanyawu(蓝牙武)
我是一个初学者,我把楼主的那段拿下来运行,怎么说编译错误,用户定义类型未定义
错误指在 Dim MSSC As New ScriptControl


把Dim MSSC As New ScriptControl换成Dim MSSC 就行了

行云边 2003-10-24
  • 打赏
  • 举报
回复
本人以为,从程序运行的效率角度考虑,还是自己搞一个计算代数式的模块, goodname008的主意也很高明
pigpag 2003-10-24
  • 打赏
  • 举报
回复
不知,可能是因为你的VB是标准学习版的
flc 2003-10-22
  • 打赏
  • 举报
回复
我的VB 里的
菜单"工程/引用/下没有Microsoft Script Control 1.0"
为什么呢?
flc 2003-10-22
  • 打赏
  • 举报
回复
现在才觉出差距
easypower 2003-10-22
  • 打赏
  • 举报
回复
Maxing 2003-10-22
  • 打赏
  • 举报
回复
machinecn@etang.com sunmaoyou(不懂大师) 谢谢,给一个看看
yangjinok 2003-10-13
  • 打赏
  • 举报
回复
up
sunmaoyou 2003-10-11
  • 打赏
  • 举报
回复
我这里有一个计算代数式的模块,要的话留下Email!!
加载更多回复(12)

1,066

社区成员

发帖
与我相关
我的任务
社区描述
VB 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧