许多人问是否有一种方法可以写一个数学表达式,在文本框中以字符串形式编写,因此他们可以执行以下操作:

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评估数学表达式相关推荐

  1. javascript解析_使用JavaScript解析数学表达式

    javascript解析 by Shalvah 由Shalvah 使用JavaScript解析数学表达式 (Parsing math expressions with JavaScript) A wh ...

  2. MathML: 描述数学表达式

    在Web上显示.操作.共享及其它 文档选项 打印本页 将此页作为电子邮件发送 级别: 中级 车皓阳 (grandiose11@msn.com)中科院软件所 张治 (uphenix@hotmail.co ...

  3. Sweep扫频信号的数学表达式

    Sweep扫频信号的数学表达式 近期,因评估测试中需要实现一个满足特定时延的上升(Linear rising up).下降沿(exp-falling down)的电平信号,在实现过程中用到了NI的模拟 ...

  4. 数学表达式一键变图,CMU开发实用工具Penrose,堪称图解界LaTeX(附链接)

    来源:七月在线实验室 本文长度为2000字,建议阅读5分钟 本文为大家介绍了卡内基梅隆大学开发的一款可自动生成的新工具. 有 A.B 两个集合,A 与 B 相交,C 是 A 与 B 的交集,分别将三个 ...

  5. Qt计算器开发(二):信号槽实现数学表达式合法性检查

    表达式的合法性 由于我们的计算器不是单步计算的,所以我们能够一次性输入一个长表达式.然而假设用户输入的长表达式不合法的话,那么就会引发灾难.所以有必要对于用户的输入做一个限制. 一些限制举例: 比方, ...

  6. 数学表达式解析器简介

    2019独角兽企业重金招聘Python工程师标准>>> 在实际项目开发中如果需要解析数学公式,无须再运用解释器模式进行设计,可以直接使用一些第三方解析工具包,它们可以统称为数学表达式 ...

  7. Matplotlib 中文用户指南 4.6 编写数学表达式

    编写数学表达式 原文:Writing mathematical expressions 译者:飞龙 协议:CC BY-NC-SA 4.0 你可以在任何 matplotlib 文本字符串中使用子 TeX ...

  8. java 数学表达式解析插件_数学表达式解析-JAVA版

    1 .工具介绍 String exp = "v>=10&&v<=2000&&v%10==0"; 在 js 中,能够直接运行 eval 得 ...

  9. linux脚本语言求累加和,Linux Shell脚本语言与数学表达式

    当你理解了Shell脚本,每当需要时都能流畅编写时,那种感觉很爽的.本章中,我们将教你用脚本语言进行比较复杂的数学运算. 让我们从斐波那契数列开始吧. 斐波那契数列,又称黄金分割数列,指的是这样一个数 ...

  10. java数学计算表达式_Java初学者:内建函数计算简单的数学表达式

    这个应该在之前写的,忘记了,补上 这次我们说一下如何用java计算数学表达式的值,比如,我们要计算sin(pi/3) + cos(pi/6) + 5.6^3,怎么计算呢?这里我们需要用到java的ma ...

最新文章

  1. 安装H3C的各种问题
  2. svn cleanup failed–previous operation has not finished 解决方法
  3. html向左箭头样式,详解Bootstrap的纯CSS3箭头按钮样式
  4. 去银行贷款,有中介和没中介的巨大差别
  5. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波10 - 直方图处理 - 局部直方图处理
  6. Javascript---Immediately-Invoked Function Expression (IIFE)立即执行的函数表达式
  7. Python简介及环境搭建
  8. 暴力枚举——回文质数(洛谷 P1217)
  9. go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go)
  10. 【医疗影像处理】DICOM Rescale Intercept / Rescale Slope
  11. SAE SENT单边半字节传输协议里的CRC4与CRC6检验码编程
  12. 厉害!一年两登顶刊的31岁浙大硕导荣获杰青!
  13. 【Python】数据处理之One-Hot编码
  14. ARX助手最新版适配多版本
  15. html 旋转木马 轮播,JS实现旋转木马轮播图
  16. java 水晶按钮_C#中水晶按钮的程序生成
  17. 众数和中位数的应用题_什么是众数和中位数
  18. excel表格删除了怎么恢复数据
  19. 三分频电路Verilog设计
  20. Linux浏览器无法访问网络解决方案

热门文章

  1. NTFS - 系统解析
  2. 用C语言实现布丰投针计算圆周率问题
  3. ROS笔记(一)xxx.launch文件详解
  4. ECharts为X轴Y轴添加单位
  5. 周杰伦要出新专辑了?上 Instagram 看看
  6. 计算机电缆对绞节距,耐高温双绞计算机电缆DJFFP2√厂家
  7. 什么是水仙花数python_什么是水仙花数python
  8. python的most_common()函数
  9. html加密文件怎么解密,如何取消文件的加密保护,如何解密?
  10. sql升级重启计算机失败win10,win10系统安装sQL server提示重新启动计算机失败的解决技巧...