首页 > 解决方案 > 如何防止 NaN 作为各种数值计算的返回值?

问题描述

我是 Javascript 的新手,我正在尝试进行计算,该计算会根据输入输入的数字而变化。然而,这些函数将输出转换为 NaN,所以我想知道我是否可以将 NaN 转换为普通数字(以便我可以将 hUeCalc 和 massCalc 添加在一起并将其显示为数字)以使用,或者我是否必须使用另一个选项进行计算。

也许 switch 和 case 可能是一个选项,但我不太确定它们是否会产生我需要的效果。

在下面的代码中,您可以看到按下按钮时执行的功能。现在,当我单击激活函数 calc 的按钮时,我在 tax.innerHTML 中得到 NaN 而不是数字。

提前致谢。

function calc() {
    let hubraum = Number(hubraumComponent.value);
    let emission = Number(emissionComponent.value);
    let masse = Number(masseComponent.value);

    let hUeCalc = Number(function (){
        if (Diesel.checked == true) {
            ((Math.ceil((hubraum/100)))*9.5)+((emission-95)*2);
        }
        else if (Benzin.checked == true) {
            ((Math.ceil((hubraum/100)))*2)+((emission-95)*2);
        };
    });

    let masseCalc = Number(function (){
        let masseValue;
        if (masse <= 2000) {
           masseValue = (Math.ceil((masse/200)*5.625));
        }
        else if (masse >= 3000) {
            masseValue =(Math.ceil((masse/200)*6.01));
        }
        else if (masse >= 3500) {
            masseValue = (Math.ceil(masse/200)*6.39);
        };
    });
    // let masseValue = (Math.ceil (masse/200));

    let berechnung = (hUeCalc + masseCalc);
    tax.innerHTML = (berechnung) + "€&quot;;
    console.log('Calc has been done');
    console.log('hubraum value is ' + hubraum);
    console.log('emission value is ' + emission);
    console.log('masse value is ' + masse);
    console.log('hubraumcalc value is ' + hUeCalc);
    console.log('massecalc value is ' + masseCalc);
}

此外,这里是 HTML 以防您想查看激活所有这些的按钮

<div class="input-field-second-calc" onclick="calc()">
                <input type="button" class="btn btn-outline-primary" value="berechnen">
                <br>
                <a id="tax"></a>
            </div>

标签: javascriptfunctionnumberscalculation

解决方案


您需要在两个函数中返回一个值!

当你这样做:

let hUeCalc = Number(function (){
    if (Diesel.checked == true) {
        ((Math.ceil((hubraum/100)))*9.5)+((emission-95)*2);
    }
    else if (Benzin.checked == true) {
        ((Math.ceil((hubraum/100)))*2)+((emission-95)*2);
    };
})

您基本上是说请将函数的返回值转换为数字并将其分配给hUeCalc. 但是作为函数什么都不返回。它正在尝试将 undefined 转换为数字。结果是NaN。

这同样适用于:

 let masseCalc = Number(function (){
    let masseValue;
    if (masse <= 2000) {
       masseValue = (Math.ceil((masse/200)*5.625));
    }
    else if (masse >= 3000) {
        masseValue =(Math.ceil((masse/200)*6.01));
    }
    else if (masse >= 3500) {
        masseValue = (Math.ceil(masse/200)*6.39);
    };
});

顺便说一句,与:

if (masse <= 2000) {
   masseValue = (Math.ceil((masse/200)*5.625));
}
else if (masse >= 3000) {
    masseValue =(Math.ceil((masse/200)*6.01));
}
else if (masse >= 3500) {
    masseValue = (Math.ceil(masse/200)*6.39);
};

else if就像我们尝试使用 3700 一样,您永远不会走到最后。它不会在第一个 if 但在第二个上匹配,因为 3700 大于 3000。您需要反转两个 else if 的顺序。

您还需要为 2000 到 3000 之间的数字添加 else (如果它是可接受的值)


推荐阅读