javascript - 如何防止 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) + "€";
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>
解决方案
您需要在两个函数中返回一个值!
当你这样做:
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 (如果它是可接受的值)
推荐阅读
- c# - 如果文本框中的值正在编辑,则 Ajax 和 Json 看不到 c# 中的修改
- sql-server - 无法连接到 MSSQLSERVER
- c# - 如何处理多个新添加的实体,这些实体依赖于具有外键约束的每个水獭 - EF6
- java - 清单合并失败:添加 Exoplayer 2.10.5 后属性 application@appComponentFactory
- c# - 排序参数嵌入列表项的订单列表
- c++ - C++ TCP IP客户端,发送/接收消息重叠?
- angular - 每次激活 RouteGuard 时重新加载 ngrx 状态数据
- javascript - 从 React js 中的“根”DOM 节点获取数据属性
- python - 为什么我的 CNN 输入大小会导致 ValueError?
- c - 用 c 重新分配一个数组