V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shyrock
V2EX  ›  问与答

求一个可以让客户灵活编辑计算公式的方法

  •  
  •   shyrock · 2022-06-07 09:21:29 +08:00 · 442 次点击
    这是一个创建于 929 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前做的系统中有一个模块是绩效奖金计算,具体就是根据公司各个部门的考核方法构建公式,读取系统各种销售额、成本、周期等信息来计算每个项目的奖金。用代码直接写这个公式甚至封装成一个策略都不难。
    但是,这个公式变动很频繁,所以想做到让业务部门的人来编写公式,平台只提供一个公式录入界面。
    不知道各位大佬有没有好的思路或者有开源的方案更好。

    曾经以为规则引擎可以解决这个,仔细了解后发现不太对。
    sillydaddy
        1
    sillydaddy  
       2022-06-07 14:40:28 +08:00
    这个待解决的问题点在哪里呢?没有太搞懂。是公式很复杂难以解析呢?还是对客户来说输入公式比较麻烦?
    shyrock
        2
    shyrock  
    OP
       2022-06-07 14:46:53 +08:00
    @sillydaddy #1 痛点在于用户随时改公式,作为程序员不想陪他们玩,就想写个小白可以用的公式配置 UI 给他们自个儿玩
    sillydaddy
        3
    sillydaddy  
       2022-06-07 15:33:07 +08:00
    如果侧重点在于「公式输入」的话,我推荐参考 GrafEq 这个软件的实现方式:
    http://www.peda.com/grafeq/spec.html#math-formats

    它录入公式的特点,类似于 markdown 编辑器的「所见即所得」:随着用户把公式逐字敲进去的过程,公式会逐渐自动地显现出对应的数学格式。

    举个复杂点的例子,比如对 y 开 x 次方,纯手打的话应该是输入"root(x,y)"。不过真实过程一点都不像这个公式一样枯燥:当用户输入完"root"这几个字母,然后输入一个"(",这时「根号」这个数学符号就自动显现出格式来了,同时焦点光标自动移动到了根号左上角指数幂的位置,然后用户输入"x"。这时光标仍然在左上角,用户需要输入一个",",把焦点切换到根号里面,也就是底数部分,这时可以输入"y",光标焦点仍在根号内。最后需要输入")"将光标切出根号外面。整个过程很自然。

    这种方式有点「所见即所得」的意思,它把线性的输入字符串转变成了非线性的显示。最神奇的是当你完成了公式的输入,得到了一个完全格式化显现的公式后,你还可以把光标逐个字符向前移动,数学公式会像电影的倒放一样,逐渐恢复到线性的字符串格式。

    对于所有难记的公式,它有「 easy button 」可以用,点一个按钮自动填入公式。但所见所得的思想没变。
    http://www.peda.com/grafeq/spec.html#easy-buttons

    楼主可以试一下输入上面链接里举的例子"y={x if x>0,0 if x=0,-x if x<0}",输入过程中的实时显示反馈感觉非常好。既不像 MathType 那种纯按钮输入的死板,又不像编程一样纯代码的晦涩。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1393 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:55 · PVG 00:55 · LAX 08:55 · JFK 11:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.