如何计算字符串形式存储的乘法、除法运算表达式结果
仅含乘除运算的字符串表达式计算方案
针对仅包含数字、*、/运算符的字符串表达式,有3种常用可行方案,可根据自身场景选择:
- 手动解析实现(生产环境首选,无安全风险)
如果你处理的表达式和示例一致,都是「两个数字+单个乘/除运算符」的格式,逻辑非常简单:先定位字符串里的运算符位置,把字符串切割成左右两个数字,转成数值类型后对应做乘/除运算即可。
以JavaScript为例的实现代码:
如果后续要兼容function calc(expression) { const mulIdx = expression.indexOf('*') if (mulIdx !== -1) { const left = Number(expression.slice(0, mulIdx)) const right = Number(expression.slice(mulIdx + 1)) return left * right } const divIdx = expression.indexOf('/') const left = Number(expression.slice(0, divIdx)) const right = Number(expression.slice(divIdx + 1)) return left / right } // 测试 calc("5*2") // 返回10 calc("12/3") // 返回4"2*4*5/2"这类连续乘除的表达式,只要把所有数字、运算符按顺序拆分出来,从左到右依次迭代计算就行,不需要复杂的算法。 - 动态执行方法(仅适合本地处理可信数据场景,禁止用于用户可控输入场景)
几乎所有编程语言都自带动态执行代码的能力,比如JavaScript的eval()、Python的eval(),直接传入表达式字符串就能拿到计算结果,写法非常简单:product = "12/3" result = eval(product) # 得到结果4注意:该方案存在严重的代码注入风险,如果传入的字符串是用户可控的,攻击者可以构造恶意代码执行任意操作,比如删除服务器文件、窃取敏感数据,非完全可信的内部场景绝对不要用。
- 专用表达式解析库(适合后续可能扩展复杂运算的场景)
如果后续你的表达式可能加入加减、括号、取余甚至自定义运算规则,可以直接用对应语言生态里成熟的安全数学表达式解析库,这类库默认屏蔽了任意代码执行的能力,仅支持预设的数学运算,没有注入风险,不需要自己写解析逻辑,传入字符串即可拿到结果。
内容的提问来源于stack exchange,提问作者Kashmiryy
相关产品推荐
相关产品推荐

