首页 > 编程语言 >C#动态计算字符串中的表达式

C#动态计算字符串中的表达式

时间:2024-07-29 16:33:39浏览次数:8  
标签:string C# sc result 计算 字符串 DataTable 表达式

最近遇到一个需要计算字符串中表达式的需求,需要从字符串公式中动态计算结果。

类似下面这样

1 string expression = "Age * 0.2 + Height * 0.1 + log4";

 

使用DataTable.Compute函数

一开始找的是下面这种方法,但是不能计算对数

1 using System.Data;
2 
3 DataTable dt = new DataTable();
4 var result = dt.Compute(expression,"");

 

执行VBS脚本计算

后面又找了一种方法,利用VBS脚本里的计算功能,这种方法基本能满足需求了,复杂计算也可以。

方法如下

需要引用COM组件Microsoft Script Control 1.0

1 MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
2 sc.Language = "VBScript";
3 object result = sc.Eval("18 * 0.2 + 170 * 0.1 + log4");            
4 Console.WriteLine(result.ToString());

 

参考资料

https://stackoverflow.com/questions/333737/evaluating-string-342-yield-int-18

https://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net

标签:string,C#,sc,result,计算,字符串,DataTable,表达式
From: https://www.cnblogs.com/zhaotianff/p/18330363

相关文章

  • 纯CSS实现气泡框效果
    目标效果实现<divclass="poptriangle-border">Hello</div>/*气泡框类*/.pop{...}/*气泡尖角伪元素*/.triangle-border:before{content:'';position:absolute;top:10px;/*controlsverticalposition*/bottom:auto;lef......
  • [十万个为什么] [lua] packfield
    localfunctionprint_pack_field(s) localcnt=s:byte(5) fori=1,#sdo ifi==1then io.write("size:") elseifi==5then io.write("\ncnt:") elseifi==7then io.write("\nname_ref:") e......
  • ~/.vimrc
    配置方式:打开终端vim:edit~/.vimrc写入文件(i+Ctrl+Shift+V+esc):write:wq配置文件:""""""""""""""""""""""""""""""&qu......
  • get_current_tty 使用
    get_current_tty使用我的博客在开发内核驱动时,可以使用get_current_tty接口获取当前所在的终端,将日志打印到当前终端窗口中。比如,如果我们是通过SSH连接到SSH服务器上,通过printk等内核打印方式打印的日志内容会存储到系统日志中,通过dmesg可以查看,不会像用户态程序中......
  • [附开题]flask框架的校园疫情安全管理系统设计与实现tsckj(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景自新冠疫情全球爆发以来,校园作为高密度、高流动性的集体生活环境,其疫情防控工作面临着前所未有的挑战。学校师生众多,活动频繁,一旦发生疫情......
  • BeanPostProcessor 接口和@PostConstruct 在使用姿势上差异
    先说结论接口BeanPostProcessor更灵活,可以实现bean生命周期里前,后分别执行某些内容,必须是spring管理的bean才能实现此功能,不加@Component不生效@ComponentpublicclassMyBeanPostProcessorimplementsBeanPostProcessor{@OverridepublicObjectpostProcessBe......
  • 一款超实用的网络实时监控工具,助你轻松掌握 Docker 容器网络状态
    1.什么是check-docker-connectioncheck-docker-connection主要用于监控Docker容器的网络连接情况。它可以显示指定容器的网络连接状态,包括TCP和UDP连接的数量。用户可以通过容器ID或名称来指定要监控的容器,或者指定显示连接数最多的前N个容器。输出结果以表格......
  • PyCharm 2020 下载 安装 激活 汉化
    解压PyCharm 压缩包到当前目录下:点击此处蓝色字体下载压缩包提取码xw41鼠标右键点击PyCharmprofessional2020 选择 以管理员身份运行 :点击Next:点击Browse选择安装目录点击Next:勾选全部 点击Next:点击Install:等待安装中:选择Rebootnow......
  • SCI一区级-python实现VMD-CNN-Transformer锂离子电池剩余寿命预测
    1. 基本介绍使用VMD结合皮尔逊相关系数实现对锂离子电池数据集去噪,消除数据中“容量再生问题”使用CNN-Transformer实现特征提取:利用卷积神经网络(CNN)进行特征提取。然后,利用改进的变压器模型来捕获时间序列中的固有相关性,并将其特征映射到未来的SOH值。采用迭代策略对每个......
  • Tensorflow基于多尺度CNN-LSTM网络的滚动轴承故障诊断
    数据集:CWRU数据集模型框架:tensorflow一、数据集处理通过滑动窗口提取数据,窗口为3072,10分类任务二、网络模型三、模型预测效果最后一层TSNE可视化效果四、代码获取基于多分支CNN-LSTM的滚动轴承故障诊断数据集:CWRU数据集模型框架:tensorflow21.数据集预......