将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/100
或B3=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)