请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

思想

初级会员

21

主题

66

帖子

309

积分

初级会员

积分
309
思想
初级会员   /  发表于:2025-12-2 21:56  /   查看:111  /  回复:1
最近有公式运算的需求,分享一下过程
总体思路是先替换公式实际值,再用eval函数运算
替换过程用C#借助AI抄了个插件,纯JS的替换函数也抄了一个
先看图,











服务端替换公式的插件在附件里


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +666 收起 理由
Simon.Sun + 666 赞一个!

查看全部评分

1 个回复

思想
初级会员   /  发表于:2025-12-2 21:59:28
沙发
还有一个纯JS的字符替换函数,如果不用插件,但我觉得插件方便些下面是纯JS的替换函数
/**
* 公式关键字替换 - 核心函数
* @param {string} formula 原公式
* @param {string} rules 关键字规则(格式:"key1:value1,key2:value2")
* @returns {string} 替换后的公式
*/
function replaceFormulaKeywords(formula, rules) {
    if (!formula || !rules) return formula;
   
    let result = formula;
   
    rules.split(',').forEach(rule => {
        rule = rule.trim();
        if (!rule) return;
        
        const colonIndex = rule.indexOf(':');
        if (colonIndex === -1) return;
        
        const key = rule.substring(0, colonIndex).trim();
        const value = rule.substring(colonIndex + 1).trim();
        
        if (key && value) {
            result = result.split(key).join(value);
        }
    });
   
    return result;
}

/*
// 测试
const testResult = replaceFormulaKeywords(
    "取整((总宽+16+总高-离地)/2)-5+行高",
    "总高:2000,总宽:1000,离地:10,取整:Math.ceil,中板:12"
);

console.log("转换结果:", testResult); // Math.ceil((1000+16+2000-10)/2)-5+行高
*/
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部