JavaScript自定义FV终值计算函数返回Infinity与预期结果不符咨询
问题原因
- 核心错误是混淆了JavaScript的运算符用途:你代码中使用的
^符号在JavaScript中是按位异或运算符,而非数学幂运算符号,这是导致计算完全错误、最终返回Infinity的根本原因。 - 具体执行逻辑拆解:
- 调用
freq_rate(0.07)时,(1+0.07)^(1/12)会先将两个操作数强制转换为32位整数再做异或运算:1.07转整数为1,1/12≈0.0833转整数为0,1异或0的结果为1,因此freq_rate(0.07)最终返回1-1=0。 - 调用
discount_freq_rate(0.07)时,计算式为0/(1+0)=0。 - 最终
fv函数的计算式分母为0,因此返回Infinity。
- 调用
修正方案
JavaScript实现幂运算有两种标准写法:
- 使用内置方法
Math.pow(底数, 指数),兼容性最好 - 使用ES6新增的幂运算符
**,写法更简洁
修正后的完整代码如下:
function freq_rate(r) { // Step 1 - Equivalent Effective Rate Per Frequency, m, of the Annual Rate, r return Math.pow(1 + r, 1/12) - 1; } function discount_freq_rate(r) { // Step 2: The Discount Version of Step 1 const fr = freq_rate(r); return fr / (1 + fr); } function fv(r = 0.07,n = 30 ,m = 12) { //Apply to a Case Where r = annual interest rate, m = # months and n = # years const fr = freq_rate(r); return (Math.pow(1 + fr, m * n) - 1) / discount_freq_rate(r); }
验证结果
调用fv(0.07,30)可得到预期结果1176.064858097254,和你Excel验证的结果一致。
内容的提问来源于stack exchange,提问作者Lefty
相关产品推荐
相关产品推荐

