delphi 自定义公式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 自定义公式相关的知识,希望对你有一定的参考价值。

请问,delphi中如何实现自定义公式的计算,比如我有一个字符串是“1+(y*0.15)”这样的公式,这个是用字符串保存到数据库的,到时候直接取出来,把Y值赋进去,算出该公式的值,公式是可变的,参数也不固定是几个,如何写函数啊,我实现不能,哪位大大帮帮忙

如果仅仅是四则运算

可以参考 pascal 版的《数据结构》

里面有实现四则运算算法

然后制定个规则,公式变量序列 x,y,z,.... 系列字母,满足最大参数要求
调用时提供可变参数,参数按公式变量序列来替代
函数原型建议如下:
Varriant function Operation(expressions: string,...)
begin
// 1.替换 x,y,z 值
// 2. 将替换后的字串执行四则运算
// 3.返回可变类型值
end;

experssions: 为你的计算表达式模板,即公式
... 为可变参数,统一用字串吧

如 i = Operation('y+(x*0.15)','0.1','3');

即 x = 0.1 , y = 3追问

有无完整实例

追答

以前用Delphi做过一个C语言解释器,有点类似,但是在过于复杂的框架下实现的,且没有参数替代的部分
事实上四则运算很容易找到现成的代码,当年学C语言时把这个当过课堂作业嘛
参数替代 用字串操作的 Pos Delete Insert 可搞定

另:我记得有个Pascal 的脚本解释器组件,只要你由公式模板替换出表达式,解释器组件应该可以帮你完成四则运算,你可以找来试下。

参考技术A e是表示什么?看你的示例里的公式,如果刚好能在delphi中实现。
你直接取出公式x,传到一个函数function f(x:string):string,函数里stringreplace(x,'a','%0:d',[rfreplaceall]),依次用%1:d取代b2取代c3取代d。
返回的一个字符串就是类似%0:d div %1:d +%2:d
到时候要用,就format(f(x),[a,b,c,d])

如果你写的公式是随便写的,比如除法是用% ,多取代一次,用div替换就好。哦注意div是整型相除,如果是浮点数相除要用/
刚刚没注意这个,抱歉
你还是全部用浮点型的,然后先替换div成/,再替换d %3:f
参考技术B 搜索源代码吧 网上有的 关键字可以用 delphi 表达式 计算 源码。追问

没找到

追答

你给我邮箱 lucychrisebb@hotmail.com 发个邮件吧 下班后回家我发给你

本回答被提问者采纳

EXCEL中图表如何引用自定义的公式名称

我在excel中定义了一个公式,名称“yil”,打比方,公式为=N(OFFSET……)
然后我想用这个yil为纵坐标作一个图,可是我在数据系列里填上这个yil时,点击确定,却没有任何反应,确信引用书写格式是对的。

请问是不是还有别的需要设置的东西。就是在一个新建图表中引用已有的公式名称时,是否还需要有特殊的设置?请各位高手不吝赐教啊。

 (1)在编制好的Excel表格中的某一个单元格(例如D1)中输入“0.95”

(2)数据(例如B2)所在的行的空白单元格(C2)中输入“=B2*$D$1",按键盘上”回车“键,这时就完成单元格B2中的数据乘以0.95的操作

(3)选中单元格C2,将光标放到单元格C2的右下角,当出现”+“号后,按住鼠标左键往下拉动鼠标,这样就实现了”自动填充“功能,将一列数据中每一个单元格中数据乘以0.95。

备注:$D$1是绝对引用。

参考技术A 定义名称时,要定义为工作表级的名称。

sheet1!yil
=N(offset(...))

然后在图表中引用时,也要加上工作表名
=sheet1!yil
参考技术B 你这么写

sheet1!yil本回答被提问者采纳

以上是关于delphi 自定义公式的主要内容,如果未能解决你的问题,请参考以下文章

给解释下delphi的一个自定义函数

Delphi 如何创建自定义的文件类型关联

Delphi 2009 - 在自定义 Delphi 组件中设置默认属性值

Delphi自定义函数声明及调用问题!

Delphi自定义组件如何在属性面板中实现打开文件的对话框?

delphi如何接收别的程序发过来的自定义的消息