You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript自定义FV终值计算函数返回Infinity与预期结果不符咨询

问题原因
  • 核心错误是混淆了JavaScript的运算符用途:你代码中使用的^符号在JavaScript中是按位异或运算符,而非数学幂运算符号,这是导致计算完全错误、最终返回Infinity的根本原因。
  • 具体执行逻辑拆解:
    1. 调用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。
    2. 调用discount_freq_rate(0.07)时,计算式为0/(1+0)=0。
    3. 最终fv函数的计算式分母为0,因此返回Infinity。
修正方案

JavaScript实现幂运算有两种标准写法:

  1. 使用内置方法Math.pow(底数, 指数),兼容性最好
  2. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:09:00