将excel公式转换为JS?

时间:2017-07-07 15:49:30

标签: javascript jquery excel math

我有这个公式,它使用权力,例如' 10到权力30'

=B2*(B3/12) / (1-(1+(B3/12)) ^ -B6)

问题在于我无法将^放在JS / jQuery中,我必须使用Math.pow()作为等价物。

我已经尝试了很多不同的职位,但我似乎无法正确理解,括号真的让我感到困惑。我将公式的哪些部分包裹在.pow内?

我的尝试:=B2*(B3/12) / Math.pow( (1-(1+(B3/12)) , -B6) )

更新 请参阅此Fiddle

小提琴代码:

var B2 = 500000; //£500,000
var B3 = 2.00; //2.00%
var B6 = 300; //Total number of payments

var original_formula =  'B2*(B3/12)/(1-(1+(B3/12))^-B6)';

var x = B2 * (B3 / 12) / Math.pow(1 - (1 + (B3 / 12)), -B6)

console.log(x);

//Expected/Excel result = 2,119.27
//Actual result  = 2.9884337938456618e-229 <- what's going on here?

2 个答案:

答案 0 :(得分:2)

没有试过这个,但有一个问题可能就是你用Math.pow()用括号括起这两个参数。

在原始公式中,将括号中的基数和指数包装在一起:

(1 - (1 + (B3 / 12)) ^ -B6)

Math.pow()有两个参数,基数和指数: Math.pow(base, exponent)

你不能在Javascript中的两个参数中使用括号,事实上你不需要,因为pow()函数知道这两个参数应该一起使用。

所以而不是:

Math.pow((1 - (1 + (B3 / 12)), -B6))

我认为应该更像:

Math.pow(1 - (1 + (B3 / 12)), -B6)

答案 1 :(得分:1)

=B2*(B3/12) / (1-(1+(B3/12)) ^ -B6)

相同
=B2*B3/12 / ( 1 - (1+B3/12) ^ -B6 )

随着parantheses数量的减少,可能更容易看到javascript实现应该

= B2*B3/12 / ( 1 - Math.pow(1+B3/12, -B6) )

您还需要将B3=2.00%翻译成B3=2.00/100B3=0.02。然后结果确实是2119.2716932202998

&#13;
&#13;
var B2 = 500000; //£500,000
var B3 = 2.00; //2.00%
var B6 = 300; //Total number of payments

var original_formula =  'B2*(B3/12)/(1-(1+(B3/12))^-B6)';

B3 = B3/100 // 2.0% is 0.02 as number
var x = B2*B3/12 / (1 - Math.pow(1 + B3/12, -B6) )

var log = document.getElementById("log")
log.innerHTML += "x="+x;
&#13;
<div id="log"></div>
&#13;
&#13;
&#13;