2

我正在用 javascript 制作一个计算器,截至目前它计算: sin, cos, tan, cot, sec, cscand also arcand hyberbolicof all subtypes, sqrt, cbrt, y-th root, and pow. 问题是我不想拥有pow(x,y)作为函数,我希望能够输入例如:

2^3+2^4 # instead of pow(2,3)+pow(2,4)

如上所示,我该如何获取键入的函数?这是查看它的计算器: http: //calcy.comze.com/

4

2 回答 2

2

您可以将^符号转换为pow函数,或Math.pow使用正则表达式:

'2.14^3+ 2^2.5 - 12'.replace(/(\d+(?:\.\d+)?)\^(\d+(?:\.\d+)?)/g, function(a, b, c) {
    return 'pow(' + b + ', ' + c + ')';
})
// pow(2.14, 3)+ pow(2, 2.5) - 12

使用这种方法,您甚至可以预先计算功率结果并像这样替换胡萝卜:

'2^3+ 2^2.5 - 12'.replace(/(\d+(?:\.\d+)?)\^(\d+(?:\.\d+)?)/g, function(a, b, c) {
    return Math.pow(b, c);
});
// 8+ 5.656854249492381 - 12
于 2013-02-23T07:01:25.687 回答
0

我假设你有一个字符串中的公式。您可以这样做:

扩展 numbr proto 以获得一个pow方法:

Number.prototype.pow = function(n){
   return Math.pow(this,n);
}

环绕每个数字()并替换^.pow()

str = str.replace(/[\d|\d.\d]+/g, function(n){
   return '(' + n + ')'
})
.replace(/\^/g, '.pow')

评估字符串

eval(str)

工作示例:http: //jsbin.com/igegok/1/edit

于 2013-02-23T06:32:11.437 回答