将Excel公式转换为JS?

我有这个公式,它使用的权力,如'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) )

更新:请看这小提琴

小提琴代码:

 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? 

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

是相同的

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

有了这种减less的parantheses数量可能更容易看到的JavaScript实现应该是

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

您还需要将B3=2.00%转换为B3=2.00/100B3=0.02 。 那么结果的确是2119.2716932202998

 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; 
 <div id="log"></div> 

还没有试过这个,但是有一个问题可能是你用一个圆括号在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)