• 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

Object Storage Arubacloud
0 głosów
293 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 (86,360 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ź 116 wizyt
pytanie zadane 4 czerwca 2018 w C i C++ przez Karlato Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 452 wizyt
+2 głosów
1 odpowiedź 105 wizyt
pytanie zadane 16 grudnia 2023 w JavaScript przez VBService Ekspert (253,280 p.)

92,565 zapytań

141,416 odpowiedzi

319,598 komentarzy

61,949 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...