JavaScript: Rechenoperator in Variable abspeichern und wieder als Rechenzeichen in eine Rechnung übergeben?
Meine Funktion sieht so aus:
var aufgabe = document.getElementById("rechnung").value;
aufgabe = aufgabe.trim();
var woIstPlus = aufgabe.indexOf("+");
var summand1 = parseInt(aufgabe.substring(0, woIstPlus));
var summand2 = parseInt(aufgabe.substring(woIstPlus + 1));
switch (operator) {
case "+":
erg = summand1 + summand2;
break;
case "-":
erg = summand1 - summand2;
break;
case ":":
erg = summand1 / summand2;
break;
case "/":
erg = summand1 / summand2;
break;
case "*":
erg = summand1 * summand2;
break;
case "%":
erg = summand1 % summand2;
break;
default:
System.out.println("nichts");/
}
document.getElementById("ergebnis").innerHTML = erg;
Anfangs habe ich damit nur Addition rechnen wollen, aber jetzt will ich, dass alles aus einem Eingabefeld ausgelesen und berechnet wird.
2 Antworten
Danke. Habs jetzt mit einem Prof gelöst
Html: <div id="msg"></div>
<input id="txt_input"
type="input"
required
pattern="[0-9]+[\+\-\*\/]{1}[0-9]+"
placeholder="1 + 3"
title='Bitte im Format "Zahl Operant Zahl" eingeben :-)'></input>
<button id="btn_calculate">berechne</button>
<input id="txt_result" type="input" disabled></input>
JS: $("#btn_calculate").click( function() {
let string = $("#txt_input").val().trim();
let add = new RegExp("^[0-9]+[\+]{1}[0-9]+$").test(string);
let sub = new RegExp("^[0-9]+[\-]{1}[0-9]+$").test(string);
let mul = new RegExp("^[0-9]+[\*]{1}[0-9]+$").test(string);
let div = new RegExp("^[0-9]+[\/]{1}[0-9]+$").test(string);
if (add || sub || mul || div) {
let result = null;
if(add) {
let list_of_nums = string.split("+");
let z1 = parseInt(list_of_nums[0].trim());
let z2 = parseInt(list_of_nums[1].trim());
result = z1 + z2;
}
if(sub) {
let list_of_nums = string.split("-");
let z1 = parseInt(list_of_nums[0].trim());
let z2 = parseInt(list_of_nums[1].trim());
result = z1 - z2;
}
if(mul) {
let list_of_nums = string.split("*");
let z1 = parseInt(list_of_nums[0].trim());
let z2 = parseInt(list_of_nums[1].trim());
result = z1 * z2;
}
if(div) {
let list_of_nums = string.split("/");
let z1 = parseInt(list_of_nums[0].trim());
let z2 = parseInt(list_of_nums[1].trim());
result = z1 / z2;
}
$("#txt_result").val(result);
} else {
$("#txt_result").val("fail");
Die schnellste Lösung erreichst du mit eval. Nur solltest du zumindest die Eingabe vorher validieren, sodass nur Rechenzeichen interpretiert werden.
Ich würde den Term in drei Felder aufteilen: Zwei Eingabefelder für Zahl 1 und Zahl 2 sowie eine Droplist (select) für die verfügbaren Rechenoperatoren.
PS.: So lange du kein HTML setzt, brauchst du innerHTML nicht. Das Property innerText ist passender.