• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zmiana pobranej zmiennej tekstowej na operator arytmetyczny JS

VPS Starter Arubacloud
0 głosów
326 wizyt
pytanie zadane 4 listopada 2020 w JavaScript przez Kiri Nowicjusz (120 p.)
<!doctype html>
	<html lang="pl-PL">
		<head>
			<meta charset="utf-8">
			<title> 
				Zadanie 2 nie działa 
			</title>
			<style>
			input[type=button]{
				text-align:center;
				border-bottom-color:black;
			}
			body{
				background-color:orange;
			}
			</style>
		</head>
		<body>
			<form>
				<p> Proste działania </p>
				<input type="number" id="number_a" placeholder="Podaj wartość A">
				<br>
				<input type="number" id="number_b" placeholder="Podaj wartość B">
				<br>
					<input type="button" value="  +  " onClick="dzialanie('+')">
					<input type="button" value="  -  " onclick="dzialanie('-')">
					<input type="button" value="  *  " onclick="dzialanie('*')">
					<input type="button" value="  /  " onclick="dzialanie('/')">
					<input type="button" value="  ^  " onclick="dzialanie('**')">
				<br>
				<br>
					<div id="wynik"> </div>
				<br>
					<input type='reset' value="Reset">
			</form>
		<script type='text/javascript'>
		function dzialanie(znak){
				var a=document.getElementById("number_a").value*1;
				var b=document.getElementById("number_b").value*1;
				// Jak przekonwertować tekst na operator arytmetyczny ?
				var dzialanie = znak;
				var wynik = a dzialanie b;
				document.getElementById("wynik").innerHTML="Wynik to: "+ wynik;
			}
		</script>
		</body>
	</html>

 

 

 

Czy istnieje jakaś opcja, żeby zmienić pobraną wartość "znak" na operator arytmetyczny aby funkcja mogła szybko policzyć wynik? Oraz jak by się dało w jaki sposób zapisać takie działania?

 

Do tej pory zapisywałem prosto:

		var wynik = a dzialanie b;

 

ale no nie idzie. Wyskakuje błąd: Uncaught SyntaxError: Unexpected identifier w w/w linijce. Na początku użyłem od razu " a znak b" jednak nie działało, dlatego postanowiłem stworzyć nową zmienną, która jak widzę nić nie daję. 

Żeby uprzedzić pytania, mam już wersję z różnymi funkcjami czy też wersję z funkcją, która sprawdza zawartość zmiennej i wykonuję się dane obliczenie.

Również dodam, że jestem na poziomie szkolnym w pisaniu skryptów, dopiero się uczę więc z góry przepraszam za jakieś rażące błędy w pisaniu kodu. 

Jednak chciałbym zrobić  takie rozwiązanie j/w. Jakieś pomysły? 

2 odpowiedzi

+1 głos
odpowiedź 4 listopada 2020 przez ScriptyChris Mędrzec (190,190 p.)

Można to zrobić na kilka sposobów:

  • stworzyć obiekt (mapę) znaku działania do funkcji wykonującej to działanie
  • napisać switcha, którego case'y będą sprawdzać znak działania, a w blokach je wykonywać
  • niezalecane sposoby: wykonać działanie tworząc funkcję dynamicznie lub korzystając eval
komentarz 4 listopada 2020 przez Kiri Nowicjusz (120 p.)

Dlaczego Eval nie jest zalecany?

Zastosowałem go i śmiga jak chciałem właśnie. 

var wynik = eval(a + dzialanie + b);

Co do switcha to już mam podobne rozwiązanie :)

Dzięki wielkie za pomoc, poczytam o tym Evalu, a z racji, że to kod przeznaczony na rozwiązanie zadania szkolnego to nie będę wybrzydzać. Pozdrowionka i miłego dnia :) 

komentarz 4 listopada 2020 przez ScriptyChris Mędrzec (190,190 p.)

Dlaczego Eval nie jest zalecany?

A przeczytałeś podlinkowaną dokumentację? Jest tam sekcja odpowiadająca na to pytanie. 

0 głosów
odpowiedź 4 listopada 2020 przez SzkolnyAdmin Szeryf (88,920 p.)

Zamiast linii 41 i 42 wstaw klasyczną konstrukcję kalkulatora:

switch(znak) {
	case '+': wynik=a+b; break;
	case '-': wynik=a-b; break;
	case '*': wynik=a*b; break;
	case '/': wynik=a/b; break;
	case '**': wynik=Math.pow(a, b);				
}

Oczywiście należałoby jeszcze sprawdzić wykonalność działań: b nie może być równe 0 przy dzieleniu, natomiast a i b nie mogą być równocześnie równe 0 przy potęgowaniu.

Podobne pytania

0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 4 czerwca 2018 w C i C++ przez Karlato Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 572 wizyt
+2 głosów
1 odpowiedź 120 wizyt
pytanie zadane 16 grudnia 2023 w JavaScript przez VBService Ekspert (255,840 p.)

93,008 zapytań

141,975 odpowiedzi

321,257 komentarzy

62,350 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...