当前位置: 首页 > 编程语言 > C#

将表达式从文本框转换为代码隐藏数学表达式Share

时间:2023-04-11 00:00:29 C#

将表达式从文本框转换为代码隐藏数学表达式y^z到我页面上的文本框来计算后面代码中的方程并得到结果?.NET没有用于评估任意字符串的内置函数。但是,一个名为NCalc的开源.NET库就可以了。NCalc是.NET中的数学表达式计算器。NCalc可以解析任何表达式并对结果求值,包括静态或动态参数和自定义函数。用户https://stackoverflow.com/users/1670022/matt-crouch从操作员那里回答:“如果你只需要简单的算术,那么就这样做。DataTabletemp=newDataTable();Console.WriteLine(temp.Compute(”15/3",string.Empty));编辑:更多信息。查看System.Data.DataColumn类的表达式属性的MSDN文档。“表达式语法”概述了除了算术运算符之外的命令列表也可以使用。(例如,IIF、LEN等)。这个问题主要有两种方法,每种方法都有一些变化,如各种答案所示。在详细讨论之前,强调解释任意数学表达式不是一项微不足道的任务,对于“玩具”语法以外的任何表达式语法,例如只接受一个或两个算术运算并不允许括号等。理解这样的任务是微不足道的,并且承认,毕竟解释平均复杂度的算术表达式是各种应用程序相对频繁的需求[因此应该提供成熟的解决方案],尝试这样做可能是明智的。“选项A”。因此,我第二推荐NCalc等Jed现成的表达式求值器之一。但是,花时间理解与解析和解释算术表达式相关的各种概念和方法可能会有用,就好像要打造自己的实现一样。关键概念是形式语法。计算器将接受的算术表达式必须遵守一组规则,例如允许的算术运算列表。例如,求值器将支持三角函数,或者如果支持三元函数,它还将包括atan2()。规则还规定了操作数的构成,例如,允许输入大至45位的数值。关键是所有这些规则都在语法中形式化了。通常,语法对先前从原始输入文本中提取的标记起作用。基本上在这个过程的某个时刻,一些逻辑需要逐个字符地解析输入字符串并确定哪些字符被排列在一起。例如,在表达式123+45/9.3中,标记是整数值123、加号运算符、整数值45、除法运算符,最后是实数值9.3。识别标记并将它们与标记类型相关联的任务是词法分析器。字典可以用语法构建(一种语法,其中“标记”是单个字符,与算术表达式解析器的语法相反,其中标记是由词法分析器生成的短字符串。)顺便说一句,语法用于定义除了算术表达式之外还有很多其他的东西。计算机语言遵循[相当复杂的]语法,但引入领域特定语言(又名DSL)以支持计算机应用程序的各种功能是相对常见的。对于非常简单的语法,可以从头开始编写相应的词法分析器和解析器。然而,语法会很快变得复杂到手写这些模块变得挑剔、容易出错并且可能更难阅读的地步。因此,词法分析器和解析器生成器作为独立的程序存在,它们从规则列表(在特定于生成器的语法表示中)为词法分析器和解析器(使用特定的编程语言,如C、Java或C#)生成代码,而许多生成器倾向于使用类似的语法,松散地基于BNF)。当使用这样的词法分析器/解析器生成器时,工作分多个步骤完成:-首先编写语法的定义(使用生成器特定的语言/语法)-通过生成器语法运行它。-人们经常多次重复上述两个步骤,因为编写语法是一项严格的练习:生成器会抱怨许多可能写入语法的歧义。–最终生成器生成一个源文件(使用所需的目标语言,例如C#等)–这个源包含在整个项目中–项目中的其他源文件可以调用生成器生成的源文件中公开的函数和/或与解析期间识别的各种模式相对应的一些逻辑可以很容易地嵌入到生成器生成的代码中。–然后可以像往常一样构建项目,也就是说,就好像解析器和词法分析器是手写的一样。这就是20,000英尺的关于使用形式语法和代码生成器的过程的介绍。可以在此链接中找到解析器生成器(也称为编译器编译器)的列表。对于C#中的简单工作,我还想提一下Irony。阅读这些网站以更好地理解这些概念可能会很有见地,即使目前没有成为从业者的意图。如上所述,我想强调的是,对于这个特定的应用程序,现成的算术求值器可能是更好的方法。这个库解决了这些的主要缺点http://www.codeproject.com/Articles/21137/Inside-the-Mathematical-Expressions-Evaluator我的最终代码CalculatorCal=newCalculator();txt_LambdaNoot.Text=(Cal.Evaluate(txt_C.Text)/fo).ToString();现在,当输入3*10^11时,他将获得300亿。您需要实施(或查找第3方源代码)表达式解析器。这可不是小事。如果您想自己做,您需要的是代码内扫描器(又名Lexer)+解释表达式的解析器。或者,您可以找到第三方库来完成这项工作,其工作方式类似于JavaScripteval(string)函数。看看这里,它描述了一个递归下降解析器。此示例是用C语言编写的,但一旦您理解了本文中描述的想法,您应该能够轻松地将其改编为C#。它没有听起来那么复杂,特别是如果您有足够的运营商支持。优点是您可以完全控制将要执行的表达式(以防止您站点的最终用户注入恶意代码)。以上就是《C#学习教程:将文本框的表达式转换为代码背后的数学表达式》的全部内容。如果对大家有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: