用VB评估数学表达式
许多人问是否有一种方法可以写一个数学表达式,在文本框中以字符串形式编写,因此他们可以执行以下操作:
sub something_click()textbox2.text=eval(textbox1.text)
end sub
好吧,这当然是可行的,并且可以通过管理某些字符来完成。 这样,您可以根据需要将其复杂化。 我通常的做法是通过5个简单的步骤:
1.创建2个字符串数组,将数字保存在一个中,将运算符保存在另一个中:
2.将第一个数组转换为双精度数组(因此您可以使用Option Strict)
3.评估能力(我不评估根,因为您可以使用a ^ 0.5代替sqrt等)
4.评估产品和部门。
5.评估总和和差额。
完成此小功能后,我想使用递归性制作另一个函数来处理括号,这在处理根时非常有用,因为您可以编写a ^(1/5)而不是第5个根。
让我们将第一个函数称为“ Basics”,然后将括号处理程序称为“ Eval”,它们可能如下所示:
Public Function Basics(ByVal Str1 As String) As DoubleDim i, j, k As IntegerDim Boo1 As Boolean = FalseDim mStr1(1), mStr2(0), mStr3(0), mStr4(0) As StringDim mDou1(), mDou2(), mDou3() As Double If Str1 = "" Then Return 0 : Exit Function'----------------------------------------------------------'' Save in mStr1 the numbers. Save in mStr2 the operators. ''----------------------------------------------------------'j = 1For i = 1 To Str1.Lengthk = Asc(Mid(Str1, i, 1))If (k >= Asc("0") And k <= Asc("9")) Or k = Asc(".") Or (k = Asc("-") And Boo1 = False) ThenmStr1(j) = mStr1(j) & Chr(k): Boo1 = TrueElseIf k = 69 ThenmStr1(j) = mStr1(j) & Chr(69) & Mid(Str1, i + 1, 1): i = i + 1ElseIf Boo1 = True ThenReDim Preserve mStr2(j)mStr2(j) = Chr(k): j = j + 1ReDim Preserve mStr1(j)End IfBoo1 = FalseEnd IfNext'--------------------------------------'' Save in mDou1 the numbers as doubles ''--------------------------------------'ReDim mDou1(UBound(mStr1))For i = 1 To UBound(mStr1): mDou1(i) = CDbl(mStr1(i)): Next'------------------------'' First priority: powers ''------------------------'j = 1: ReDim mDou2(1): mDou2(1) = mDou1(1)For i = 1 To UBound(mStr2)If mStr2(i) = "^" Then: mDou2(j) = mDou2(j) ^ mDou1(i + 1)ElseReDim Preserve mStr3(j): mStr3(j) = mStr2(i)j = j + 1: ReDim Preserve mDou2(j)mDou2(j) = mDou1(i + 1)End IfNextIf UBound(mStr3) = 0 Then Return mDou2(1) : Exit Function'-----------------------------------------'' Second priority: products and quotients ''-----------------------------------------'j = 1: ReDim mDou3(1): mDou3(1) = mDou2(1)For i = 1 To UBound(mStr3)If mStr3(i) = "*" Then: mDou3(j) = mDou3(j) * mDou2(i + 1)ElseIf mStr3(i) = "/" Then: mDou3(j) = mDou3(j) / mDou2(i + 1)ElseReDim Preserve mStr4(j): mStr4(j) = mStr3(i)j = j + 1: ReDim Preserve mDou3(j)mDou3(j) = mDou2(i + 1)End IfNextIf UBound(mStr4) = 0 Then Return mDou3(1) : Exit Function'---------------------------------------'' Third priority: sums and differences. ''---------------------------------------'Basics = mDou3(1)For i = 1 To UBound(mStr4)If mStr4(i) = "+" Then: Basics = Basics + mDou3(i + 1)ElseIf mStr4(i) = "-" Then: Basics = Basics - mDou3(i + 1): End IfNext
End Function
对于括号处理程序:
Public Function Eval(ByVal Str1 As String) As DoubleDim i, j, k(2), c As IntegerDim Str2 As StringIf Str1 = "" Then Return 0 : Exit Function'------------------------------'' Find the outern parenthesis. ''------------------------------'j = 0For i = 1 To Str1.LengthIf Mid(Str1, i, 1) = "(" ThenIf j = 0 Then k(1) = ij = j + 1ElseIf Mid(Str1, i, 1) = ")" ThenIf j = 1 Then: k(2) = i: Exit For: End Ifj = j - 1End IfNext'----------------------------------------------------------------------'' Using recursivity, it'll find the inner ones, and add '*' when needed''----------------------------------------------------------------------'If j = 1 ThenIf k(1) > 1 Then c = Asc(Mid(Str1, k(1) - 1, 1))Str2 = ""If (c >= Asc("0") And c <= Asc("9")) Or c = Asc(".") Then Str2 = "*"If c = Asc("-") Then Str2 = "1*"Str1 = Eval(Mid(Str1, 1, k(1) - 1) & Str2 & Eval(Mid(Str1, k(1) + 1, k(2) - k(1) - 1)).tostring & Mid(Str1, k(2) + 1).tostring).tostringEnd IfReturn basics(Str1)
End Function
这是VB 2005 Express版本的功能,语法可能会在其他版本的VB中更改,因此您可能必须更改某些“返回”,“ ToString”和“ .Length”,以及使用以下方法声明数组或处理行的方式':'。
您还应注意,当括号之前需要时,它将添加一个“ *”,但之后需要时将不会添加。 所以2(8)= 16但(2)8将是一个错误。
这是一个非常简单的功能,但是我确信您会发现它很有用。
卡德
From: https://bytes.com/topic/visual-basic/insights/759263-evaluate-mathematical-expressions-vb
用VB评估数学表达式相关推荐
- javascript解析_使用JavaScript解析数学表达式
javascript解析 by Shalvah 由Shalvah 使用JavaScript解析数学表达式 (Parsing math expressions with JavaScript) A wh ...
- MathML: 描述数学表达式
在Web上显示.操作.共享及其它 文档选项 打印本页 将此页作为电子邮件发送 级别: 中级 车皓阳 (grandiose11@msn.com)中科院软件所 张治 (uphenix@hotmail.co ...
- Sweep扫频信号的数学表达式
Sweep扫频信号的数学表达式 近期,因评估测试中需要实现一个满足特定时延的上升(Linear rising up).下降沿(exp-falling down)的电平信号,在实现过程中用到了NI的模拟 ...
- 数学表达式一键变图,CMU开发实用工具Penrose,堪称图解界LaTeX(附链接)
来源:七月在线实验室 本文长度为2000字,建议阅读5分钟 本文为大家介绍了卡内基梅隆大学开发的一款可自动生成的新工具. 有 A.B 两个集合,A 与 B 相交,C 是 A 与 B 的交集,分别将三个 ...
- Qt计算器开发(二):信号槽实现数学表达式合法性检查
表达式的合法性 由于我们的计算器不是单步计算的,所以我们能够一次性输入一个长表达式.然而假设用户输入的长表达式不合法的话,那么就会引发灾难.所以有必要对于用户的输入做一个限制. 一些限制举例: 比方, ...
- 数学表达式解析器简介
2019独角兽企业重金招聘Python工程师标准>>> 在实际项目开发中如果需要解析数学公式,无须再运用解释器模式进行设计,可以直接使用一些第三方解析工具包,它们可以统称为数学表达式 ...
- Matplotlib 中文用户指南 4.6 编写数学表达式
编写数学表达式 原文:Writing mathematical expressions 译者:飞龙 协议:CC BY-NC-SA 4.0 你可以在任何 matplotlib 文本字符串中使用子 TeX ...
- java 数学表达式解析插件_数学表达式解析-JAVA版
1 .工具介绍 String exp = "v>=10&&v<=2000&&v%10==0"; 在 js 中,能够直接运行 eval 得 ...
- linux脚本语言求累加和,Linux Shell脚本语言与数学表达式
当你理解了Shell脚本,每当需要时都能流畅编写时,那种感觉很爽的.本章中,我们将教你用脚本语言进行比较复杂的数学运算. 让我们从斐波那契数列开始吧. 斐波那契数列,又称黄金分割数列,指的是这样一个数 ...
- java数学计算表达式_Java初学者:内建函数计算简单的数学表达式
这个应该在之前写的,忘记了,补上 这次我们说一下如何用java计算数学表达式的值,比如,我们要计算sin(pi/3) + cos(pi/6) + 5.6^3,怎么计算呢?这里我们需要用到java的ma ...
最新文章
- 安装H3C的各种问题
- svn cleanup failed–previous operation has not finished 解决方法
- html向左箭头样式,详解Bootstrap的纯CSS3箭头按钮样式
- 去银行贷款,有中介和没中介的巨大差别
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波10 - 直方图处理 - 局部直方图处理
- Javascript---Immediately-Invoked Function Expression (IIFE)立即执行的函数表达式
- Python简介及环境搭建
- 暴力枚举——回文质数(洛谷 P1217)
- go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go)
- 【医疗影像处理】DICOM Rescale Intercept / Rescale Slope
- SAE SENT单边半字节传输协议里的CRC4与CRC6检验码编程
- 厉害!一年两登顶刊的31岁浙大硕导荣获杰青!
- 【Python】数据处理之One-Hot编码
- ARX助手最新版适配多版本
- html 旋转木马 轮播,JS实现旋转木马轮播图
- java 水晶按钮_C#中水晶按钮的程序生成
- 众数和中位数的应用题_什么是众数和中位数
- excel表格删除了怎么恢复数据
- 三分频电路Verilog设计
- Linux浏览器无法访问网络解决方案
热门文章
- NTFS - 系统解析
- 用C语言实现布丰投针计算圆周率问题
- ROS笔记(一)xxx.launch文件详解
- ECharts为X轴Y轴添加单位
- 周杰伦要出新专辑了?上 Instagram 看看
- 计算机电缆对绞节距,耐高温双绞计算机电缆DJFFP2√厂家
- 什么是水仙花数python_什么是水仙花数python
- python的most_common()函数
- html加密文件怎么解密,如何取消文件的加密保护,如何解密?
- sql升级重启计算机失败win10,win10系统安装sQL server提示重新启动计算机失败的解决技巧...