Hallo Sana,
typeof(NaN) ist null, darum ist der erste Teil deiner Logik immer false.
Aber du machst es Dir zu schwer. Es gibt die Funktion isNaN.
Und du solltest das Wörtchen "var" verlegen. Wenn es bei den Plausis steht, erweckt es den Eindruck, als wolltest Du dort eine lokale Variable anlegen. Das tut var ohnehin nicht, es erzeugt Variablen im Funktionsscope.
Es gehört also vor die Zuweisungen am Anfang. Und dann solltest Du var durch let ersetzen, das ist moderneres JavaScript und erzeugt Variablen tatsächlich so, wie man es aus C oder Java kennt: Im Scope der geschweiften Klammern, worin es steht.
Ich habe noch ein paar Zeilenumbrüche gemacht, damit es mir nicht die Darstellung zerreißt. Und ich verwende textContent statt innerHTML für die Ausgabe, weil Du ja Text schreibst und kein HTML. Warum also den HTML Parser anwerfen?
function calculate() {
let input1 = parseFloat(
document.formular.input1.value
.replace(/,/ , ".") );
let input2 = parseFloat(
document.formular.input2.value
.replace(/,/ , ".") );
let input3 = parseFloat(
document.formular.input3.value
.replace(/,/ , ".") );
if (isNaN(input1)) { input1 = 0; }
if (isNaN(input2)) { input2 = 0; }
if (isNaN(input3)) { input3 = 0; }
document.getElementById("output").textContent =
(input1 + input2 + input3).toString()
.replace(/\./ , ",");
}
Ja. Und dann ist mir das viel zu feucht. Ein Grundprinzip des Programmierens heißt DRY (Don't Repeat Yourself). Dieser Code schreit nach einer Funktion, die die Aufbereitung der Eingabedaten übernimmt.
function calculate() {
let summe = getInputAsFloat(document.formular.input1) +
getInputAsFloat(document.formular.input2) +
getInputAsFloat(document.formular.input3);
document.getElementById("output").textContent =
summe.toString().replace(/\./ , ",");
}
function getInputAsFloat(element) {
let input = parseFloat(element.value.replace(/,/ , ".") );
return (isNaN(input)) ? 0 : input;
}
Die Zeile return (isNaN(input)) ? 0 : input;
ist eine inline-Bedingung mit dem ?: Operator. Es ist die Kurzform von
if (isNaN(input))
return 0;
else
return input;
Rolf
sumpsi - posui - obstruxi