使用输入的公式计算值
calculate values using entered formula
这是我的html代码:
<input id="R1" type="text" value="100">
<input id="R2" type="text" value="200">
<input id="formula" type="text" value="">
<input type="button" id="save" value="save">
在这里,用户像R1+R2
、(R1-R2)*100
一样动态地输入公式值。我需要用这个公式来计算最终值。
Ex:如果用户在公式字段R1+R2;
中输入值,我需要结果300。如何动态计算该值?
看看这个片段,应该可以使用任何组合:
function calExpression() {
var f = document.getElementById('formula');
var inps = document.getElementsByTagName('input');
var expression = f.value.toUpperCase();//' '+f.value.replace(/([-'/'+'(')])/g,' $1 ')+' ';
for (var i = 0; i < inps.length; i++) {
if (inps[i].id && inps[i].type && inps[i].type.toLowerCase() === 'text') {
expression = expression.replace(new RegExp('''b'+inps[i].id+'''b', 'ig'), inps[i].value);
}
}
eval('f.value = '+expression+';');
}
<input id="R1" type="text" value="100">
<input id="R2" type="text" value="200">
<input id="formula" type="text" value="">
<input type="button" id="save" value="save" onclick="calcExpression()">
您可以使用eval
。这是最快、最简单的解决方案,但您必须小心使用,并使用regexp检查公式中只有R1、R2、(,(和数学运算符。
或者(更好的解决方案(您可以找到一个库来解析表达式,例如http://mathjs.org/docs/expressions/parsing.html
<input type="button" id="save" value="save" onclick="return calculate()">
<script>
function calculate() {
var val1 = document.getElementById('R1').value;
var val2 = document.getElementById('R2').value;
var result = +val1 + +val2;
document.getElementById('formula').value = result;
}
</script>
因为"+"出现问题,您必须使用+val1 + +val2
中缀到前缀的转换算法:Infix到前缀转换
前缀评估算法:前缀评估算法
使用这些链接中的帮助。
您可以使用.eval((方法来评估以字符串表示的JavaScript代码。这是一个非常强大的方法。
然后,你必须解析你的公式。使用这段代码,您将能够添加像((R1+R2) - (R1*3)) + 1
这样的表达式。
function calculate(){
var valid = true;
var regex = /(?:[a-z$_][a-z0-9$_]*)|(?:[;={}'[']"'!&<>^''?:])/ig;
var formula = document.querySelector('#formula').value;
var R1 = parseInt(document.querySelector('#R1').value);
var R2 = parseInt(document.querySelector('#R2').value);
formula = formula.replace(/R1/g, R1).replace(/R2/g,R2);
formula = formula.replace(regex, function (elm) {
return Math.hasOwnProperty(elm)
? "Math."+elm
: valid = false;
});
if (valid)
alert(eval(formula));
}
然后在保存按钮上添加onlick
事件:
<input id="R1" type="text" value="100">
<input id="R2" type="text" value="200">
<input id="formula" type="text" value="">
<input type="button" id="save" value="save" onclick="calculate()">
这是工作Plunker
相关文章:
- 计算输入中有多少逗号分隔的字符串
- 计算输入值
- 如何从范围滑块动态值计算输入值
- 计算输入的每个单词组合的百分比
- 使用phpjavascript动态计算输入字段
- 用于计算输入框中的单词的 JavaScript 代码
- 如何计算输入 HTML 元素的宽度,使其与其内容的大小相匹配
- JavaScript 不计算输入框中的制表符
- 用数据计算输入和文本区域的数量
- 计算输入到数组中的项目
- jQuery - 计算输入字段的总和,包括稍后添加的字段
- AngularJS-多绑定-计算输入值
- 如何制作“自动求和计算”输入字段
- 如何计算输入字段的值
- 计算输入字段和每个函数
- 使用javascript(新字段)计算输入值
- 动态计算输入值
- Javascript自动计算输入字段中的总字符
- SO标签编辑器计算输入宽度
- 自动计算输入字段