我是 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 incase 你想看到激活所有這些的按鈕
<div class="input-field-second-calc" onclick="calc()">
<input type="button" class="btn btn-outline-primary" value="berechnen">
<br>
<a id="tax"></a>
</div>
uj5u.com熱心網友回復:
你需要在你的兩個函式中回傳一個值!
當你這樣做時:
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(如果它是可接受的值)
uj5u.com熱心網友回復:
代碼重構應將當前的計算分別分成提供/實作單個專用計算函式的部分和呼叫具有正確值(包括有效回退值)的計算的部分,以防某些條件無法滿足。
另外我建議修復命名。不要混合語言。跳過德語部分,因為大部分代碼(包括日志記錄)都是用英語命名和注釋的。
function getCalculatedHUeValue(displacement, emission, fuelFactor) {
return (Math.ceil(displacement / 100) * fuelFactor) ((emission - 95) * 2);
}
function getCalculatedMassValue(mass, massFactor) {
return Math.ceil(mass / 200 * massFactor);
}
function calc() {
const displacement = Number(displacementComponent.value);
const emission = Number(emissionComponent.value);
const mass = Number(massComponent.value);
const hUeCalc = getCalculatedHUeValue(displacement, emission,
(Diesel.checked && 9.5) ||
(Benzin.checked && 2) ||
0 // default/fallback value needs to be provided/known.
);
const massCalc = getCalculatedMassValue(mass,
((mass <= 2000) && 5.625) ||
((mass >= 3500) && 6.39) ||
((mass >= 3000) && 6.01) ||
// what is the factor for the uncovered
// mass range in between 2001 and 2999?
0 // this fallback value has to be provided/known.
);
const result = (hUeCalc massCalc);
tax.innerHTML = (result "€");
console.log('Calculation is done');
console.log('displacement value is ' displacement);
console.log('emission value is ' emission);
console.log('mass value is ' mass);
console.log('hUeCalc value is ' hUeCalc);
console.log('massCalc value is ' massCalc);
}
uj5u.com熱心網友回復:
如果您嘗試以下代碼,我認為它應該可以作業。正如你看到的,如果你想使用一個函式來賦值一個值,這個函式必須回傳一些東西,如果沒有,就沒有要分配的值。您還需要確保該函式被執行,如果您不這樣做,則它let hUeCalc = function(){}只是成為函式識別符號。
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) {
return ((Math.ceil((hubraum/100)))*9.5) ((emission-95)*2);
}
else if (Benzin.checked == true) {
return ((Math.ceil((hubraum/100)))*2) ((emission-95)*2);
};
}());
let masseCalc = Number(function (){
let masseValue;
if (masse <= 2000) {
return masseValue = (Math.ceil((masse/200)*5.625));
}
else if (masse >= 3000) {
return masseValue =(Math.ceil((masse/200)*6.01));
}
else if (masse >= 3500) {
return masseValue = (Math.ceil(masse/200)*6.39);
};
}()); // using () right after the function makes it so it get excecuted immediately
// 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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/342958.html
標籤:javascript 功能 数字 计算
