怎么样算"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代码,怎么样在程序中运行?
...全文
130 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)
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计机技术。它利用计机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。

1,066

社区成员

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

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