在 vb.net 中进行数学计算,就像在 javascript 中进行 Eval 一样

2024-04-09

有没有什么方法可以解析 vb.net 中的字符串(例如内置方法),可以像 Eval 一样进行数学运算?例如,3+(7/3.5) 作为字符串将返回 2。

我不是要求你为我编写这个代码,我只是想知道是否有built in这样做的方法,如果没有我会自己编码。

我可以打赌它无法自行解析像 Sin(90) 这样的东西,而且我知道它需要被 Math.Sin(90) 替换。

如果有内置方法,如何使用它?


通过使用有限(即简单)数学表达式有一个捷径DataTable.Compute方法 http://msdn.microsoft.com/en-us/library/system.data.datatable.compute.aspx。显然,这并不健壮(功能有限),并且出于此目的滥用 DataTable 感觉很黑客,但我想我会添加到当前的答案中。

Example:

var result = new DataTable().Compute("3+(7/3.5)", null); // 5

“Sin(90)”不适用于这种方法。请参阅DataColumn.Expression 属性页 http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx有关受支持函数的列表,特别是在“聚合”部分下。

使用 System.CodeDom 命名空间是一种选择。

一些有用的链接:

  • CodeDom 计算器 http://www.c-sharpcorner.com/UploadFile/mgold/CodeDomCalculator08082005003253AM/CodeDomCalculator.aspx
  • 使用 CodeDom 评估数学表达式 http://www.vbforums.com/showthread.php?t=397264
  • 相关SO问题:.NET 中有字符串数学计算器吗? https://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net

EDIT:为了解决您的评论,这里有一种方法来演示用等效的数学类方法替换三角函数。

C#

string expression = "(Sin(0) + Cos(0)+Tan(0)) * 10";
string updatedExpression = Regex.Replace(expression, @"(?<func>Sin|Cos|Tan)\((?<arg>.*?)\)", match =>
            match.Groups["func"].Value == "Sin" ? Math.Sin(Int32.Parse(match.Groups["arg"].Value)).ToString() :
            match.Groups["func"].Value == "Cos" ? Math.Cos(Int32.Parse(match.Groups["arg"].Value)).ToString() :
            Math.Tan(Int32.Parse(match.Groups["arg"].Value)).ToString()
        );
var result = new DataTable().Compute(updatedExpression, null); // 10

VB.NET

Dim expression As String = "(Sin(0) + Cos(0)+Tan(0)) * 10"
Dim updatedExpression As String = Regex.Replace(expression, "(?<func>Sin|Cos|Tan)\((?<arg>.*?)\)", Function(match As Match) _
        If(match.Groups("func").Value = "Sin", Math.Sin(Int32.Parse(match.Groups("arg").Value)).ToString(), _
        If(match.Groups("func").Value = "Cos", Math.Cos(Int32.Parse(match.Groups("arg").Value)).ToString(), _
        Math.Tan(Int32.Parse(match.Groups("arg").Value)).ToString())) _
        )
Dim result = New DataTable().Compute(updatedExpression, Nothing)

但请注意,您需要知道“arg”组的内容。我知道它们是整数,所以我对它们使用了 Int32.Parse 。如果它们是项目的组合,那么这种简单的方法将不起作用。我怀疑如果解决方案因更多不受支持的函数调用而变得过于复杂,您将不断需要对解决方案进行创可贴,在这种情况下,CodeDom 方法或其他方法可能更合适。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 vb.net 中进行数学计算,就像在 javascript 中进行 Eval 一样 的相关文章

  • DBI:在 eval 中引发错误

    这个问题参考了池上的评论 But if you re going to put an eval around every statement just use RaiseError gt 0 in this thread https sta
  • Visual Studio 将 1.1 扩展为 1.1000000000000001

    至少对我来说 这是有史以来最奇怪的 Visual Studio 2010 行为 我正在开发 MVC3 项目 我从另一个项目 也包括 VS2010 MVC1 如果重要的话 复制了一行代码 如下所示 target height height 1
  • 将二维数组绑定到数据网格中

    所以我的情况是我想从数据库中的两个字段填充一个二维数组 我在为数组分配数据库字段值时遇到问题 第二个是在数据网格中显示数组 我已经编码了 dgv2 Datasource myArray 但它仍然返回错误消息 这是我的代码 Dim msql
  • 正则表达式 VB.Net 正则表达式.替换

    我正在尝试执行一个简单的正则表达式查找和替换 在字符串中的一些数字后面添加一个制表符 如下所述 From a users 12345 badges To a users 12345 badges 我正在使用以下内容 s regex repl
  • PMT功能 支付方式

    下面是我计算贷款付款的函数 就像在 Excel 中一样 我需要添加另一个参数 即付款类型 function PMT ir np pv fv ir interest rate per month np number of periods mo
  • 如何在一个文本框中搜索多个值并在 DataGridView vb.net 中显示

    有没有一种方法可以在一个文本框中搜索 过滤多个值 我正在 OPIS 列中搜索两个或多个不同的单词 短语 Example 搜索 sveder 然后搜索 din 374 然后搜索 TiN 结果将是具有此描述的所有项目 我有这段代码 但是当搜索与
  • 使用新数据输入自动更新图表

    我的图表从 DataGridView 加载数据 如果将新值插入到 DataGridView 中 我希望自动使用新数据更新图表 我的图表必然是table1 and table2在我的 DataGridView 中 它从 DataTable 获
  • 更改文本框中文本的前景色和背景色

    我正在使用 VB NET 制作 C 代码编辑器应用程序 我想在用户键入关键字时更改关键字的颜色 另外 我正在寻找一种方法来突出显示某些代码行 有没有办法更改文本框或富文本框中一段文本的前景色和背景色 我真的不知道你想做什么 所以这里有一些选
  • 安装文件失败调试已启用

    我之前使用过安装项目 没有任何问题 该项目没有 SQLite DB 作为依赖项我现在正在尝试为一个包含 SQLite 作为 System Data SQLite Core 的项目制作一个 EXE 或 msi 文件 该项目是一个带有 WPF
  • asp.net vb 用户控件在调用页面上引发事件

    我正在尝试了解用户控件 我创建了一个具有文本框和按钮的用户控件 我想要做的是 当我单击用户控件中的按钮时 在 aspx 页面中填充标签 我知道我可以在页面上有一个按钮 使用用户控件上的一些属性来获取该信息 但我想知道如何使用用户控件的按钮来
  • 将读取器项目存储在数组中

    Dim myReader As OleDbDataReader Dim Index As Integer Dim status As Array Index 0 cmd CommandText SELECT CPALLOCATIONTIME
  • System.IO.Compression 和 ZipFile - 提取并覆盖

    我使用标准 VB NET 库来提取和压缩文件 它也可以工作 但是当我必须提取并且文件已经存在时 问题就出现了 我使用的代码 Imports Imports System IO Compression 崩溃时我调用的方法 ZipFile Ex
  • 如何在 ASP.NET 中检查用户是否在线?

    该网站 最后活动 1 分钟前来自此 IP 地址 背后的逻辑是什么 如果您在隐藏字段中获取用户的 IP 地址 我该如何在 vb net 中执行此操作 我如何查看有多少用户在线使用该应用程序 ASP NET 会员服务支持此功能 要获取特定用户的
  • 将 MIME 编码的附件发布到 Ariba Supply Network 时出现问题

    我在尝试使用 VB NET 和 WebRequest 对象发布一些 cXML 文本和附件时遇到问题 我相信我正在格式化我希望正确发布的数据文本 因为它与 Ariba 提供的示例相匹配 我不确定的是我是否正确使用 WebRequest 对象来
  • 您可以传递“类型”作为参数吗?

    我想在 VB NET 中做类似以下的事情 可以吗 Function task value as Object toType as Type Return DirectCast value toType End Function 是的 有系统
  • 为什么在 C# 中成员初始值设定项中不允许这样做,但在 VB.Net Me 中允许

    我正在将 VB Net 应用程序转换为 C 并注意到在 VB Net 代码中 有一个私有成员变量 它是使用Me像这样 Private m ClassA As New MyCollection Of ClassA Me 当我将其转换为 C 代
  • 如何在不使用 LINQ 的情况下按降序对 FileInfo 对象数组进行排序

    我必须降级我的代码才能在 NET 2 0 上工作 因为它不支持 LINQ 目前 该代码对数组进行排序FileInfo对象由他们FullName属性 使用 LINQ 如下所示 Dim files As FileInfo files files
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • 父窗体中的居中消息框[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以在 net 2 0中将MessageBox居中于父窗体中 我在 C 中确实需要这个并发现中心消息框 C http bytes com topic c sharp answers 26712
  • 将字符串转换为双精度 - VB

    VB中有没有一种有效的方法来检查字符串是否可以转换为双精度型 我目前正在尝试将字符串转换为双精度型 然后查看它是否引发异常 但这似乎减慢了我的申请速度 Try if number then format it current CDbl x

随机推荐

  • CORS 和 example.com

    我在 CORS 方面遇到了麻烦 我使用的 API 有 Access Control Allow Origin http www example com 因此 我无法访问继续访问我的网站所需的信息 但是 奇怪的是 如果我将 API url 放
  • 为什么使用 Nuxt v3 静态生成时 会输出两次后面的内容?

    我在用vue fontawesome https github com FortAwesome vue fontawesome与 Nuxt 3 一起使用 如上所述here https fontawesome com docs web use
  • Reactjs - 从应用程序中的任何位置获取组件

    我想知道是否有一种方法可以通过使用某种类型的 id 或类型来获取组件 就像在 DOM 操作中所做的那样 就像是 var Avatar React createClass render function React renderCompone
  • Rythm 模板引擎和 GAE

    有人设法让 Rythm 模板引擎与 Google Appengine 一起使用吗 Thanks 现在的节奏 版本1 0 0 20120505 http rythmengine com public rythm 1 0 0 20120505
  • 如何查询SOLR中的空字段?

    我有一个很大的 solr 索引 我注意到一些字段没有正确更新 索引是动态的 这导致某些字段具有空的 id 字段 我已经尝试过这些查询 但它们不起作用 id id NULL id null id id id TO 有没有办法查询空字段 Tha
  • 按字母顺序获取地图中的键的简单方法

    在 Go 中 让映射中的键按字母顺序排序的最简单方法是什么 这是我能做到的最短方法 package main import container vector import fmt import sort func main m map st
  • 可以放在桌子的底部吗?

    我想用一个 tfoot 表中的标签在语义上是正确的 但它一直显示在我的表的顶部 有没有办法让它显示在底部 正如其他人所说 tfoot是在之前定义的tbody但之后渲染 这是设计使然 不会改变语义 桌子有头 脚和身体 这些的顺序并不重要 Th
  • simple_form 提交的默认disable_with

    我想更改 simple form 中提交按钮的默认行为 这样我就不需要为所有表单显式指定 disable with gt true 如何在 simple form rb 中进行此特定更改 这在较新版本的 Rails 中略有不同 因为不推荐设
  • 纯js按属性名称开头选择元素

    语境 HTML div div div div p p 我想选择属性名称以以下开头的所有元素ng 使用 jQuery 以下链接是最接近此问题的线程 jQuery 如何按属性名称开头选择值 https stackoverflow com qu
  • java.net.UnknownHostException:www.google.com

    我正在开发一个健全性检查网络应用程序 我尝试使用 HttpUrlConnection 方法获取 url 响应 但收到 UnknownHostException System setProperty java net preferIPv4St
  • 使用 Kerberos、Web API 和 MVC 的示例项目

    是否有完整的 Visual Studio 解决方案 其中包含具有使用 Kerberos 进行身份验证的 MVC 应用程序的项目 这反过来又调用 ASP Net Web API 服务项目 在同一解决方案中 在服务调用期间将凭据委托给服务 Ge
  • UILabel - 已弃用方法“adjustsLetterSpacingToFitWidth”的替代方法

    因此 在我的代码中 我正在检查我的字符是否适合我的标签 并有以下行 return self adjustsLetterSpacingToFitWidth 这被放置在一个实现中UILabel 有人能告诉我确切的替代方案是什么吗 文档说 使用N
  • 具有 Linq-to-SQL 的 ADO.NET 数据服务

    在将 linq to sql 与 ado net 数据服务结合使用时 我遇到了一个奇怪的错误 我有一个连接到远程数据库的简单 silverlight 应用程序 我首先添加了 linq to sql 类并将一个表拖到设计器上 然后我添加了 A
  • 从 Pyspark 中包含时间戳的字符串列中提取日期

    我有一个数据框 其日期格式如下 date May 6 2016 5 59 34 AM 我打算以以下格式从中提取日期YYYY MM DD 所以结果应该是上述日期 2016 05 06 但是当我提取时使用以下内容 df withColumn p
  • Spark 无法再执行作业。执行器创建目录失败

    我们已经有一个小型 Spark 集群运行了一个月 它已经成功执行了作业 或者让我为该集群启动一个 Spark shell 无论我向集群提交作业还是使用 shell 连接到集群 错误总是相同的 root SPARK HOME bin spar
  • Javascript 按布尔属性对对象数组进行排序

    有关实际问题 请参阅最后的编辑 a false true true true true true true true true true true true true true true true true true true true t
  • 如何仅显示可组合项几秒钟?

    我有一个Text可组合在一个Box Box modifier Modifier Text text BlaBla 如何仅显示框 文本几秒钟 您可以使用LaunchedEffect并使用布尔标志延迟并在指定时间后将其设置为 false Com
  • 求 3d 中 2 个任意立方体的交集

    所以 我想找出一个函数 可以让您确定两个任意旋转和大小的立方体是否相交 如果立方体的旋转不是任意的 而是锁定到特定的轴 则相交很简单 您可以通过检查它们的边界来检查它们是否在所有三个维度上相交 以查看它们在所有三个维度上是否相交或在彼此之内
  • 方法和可选参数

    我在 Apple 文档中读到 我们可以在 Objective C 方法调用中使用可选参数 Apple 文档中的示例 采用可变数量参数的方法也是可能的 尽管它们有点罕见 额外的参数用逗号分隔 在方法名称末尾之后 与冒号不同 逗号不是 被视为名
  • 在 vb.net 中进行数学计算,就像在 javascript 中进行 Eval 一样

    有没有什么方法可以解析 vb net 中的字符串 例如内置方法 可以像 Eval 一样进行数学运算 例如 3 7 3 5 作为字符串将返回 2 我不是要求你为我编写这个代码 我只是想知道是否有built in这样做的方法 如果没有我会自己编