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

为何仅调用Math方法的JS异步函数lvl传入数字却返回NaN?

问题分析:传入数字参数的异步函数返回NaN的原因

核心原因:平方根函数传入负数导致NaN

当你传入total=25到lvl函数时,判别式的计算结果为负数,而Math.sqrt()无法处理负数参数,直接返回NaN,后续所有依赖该值的计算都会变成NaN。

具体计算过程拆解

代入xp=25到判别式表达式:

10 * 10 - 4 * 10 * (-(xp - 40))

分步计算:

  1. 计算括号内:25 - 40 = -15
  2. 取负操作:-(-15) = 15
  3. 乘法运算:4 * 10 * 15 = 600
  4. 最终判别式:100 - 600 = -500

由于Math.sqrt(-500)返回NaN,后续n1、n2的计算都会继承这个NaN,最终得到的n自然也是NaN。

修复方案

  1. 先校验判别式合法性:在计算平方根前判断判别式是否非负,避免传入负数:
async function lvl(xp) {
    const discriminantCalc = 10 * 10 - 4 * 10 * (-(xp - 40));
    // 处理判别式为负的情况
    if (discriminantCalc < 0) {
        console.log('当前XP值不符合等级计算公式要求');
        return 0; // 或返回其他合理默认值
    }
    let discriminant = Math.sqrt(discriminantCalc);
    let n1 = (-10 + discriminant) / (2 * 10);
    let n2 = (-10 - discriminant) / (2 * 10);
    let n = n1 >= 0 ? Math.floor(n1) : Math.floor(n2);
    console.log('n', n, typeof n);
    return n;
}
  1. 检查等级公式正确性:当前公式在xp<40时都会得到负的判别式,这可能和你预期的等级规则不匹配。请重新推导等级对应的数学公式,确保其在合法的XP范围内能得到非负的判别式。

内容的提问来源于stack exchange,提问作者leguchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:31:02