Werken met getallen

De taal JavaScript is helemaal gericht op het werken met strings, zeg maar met series karakters. Zodra daar mee gerekend moet gaan worden kunnen er problemen ontstaan. Cijfers moeten de ene keer als getal worden behandeld, de andere keer zijn cijfers onderdeel van een tekst en verschillen ze niet wezenlijk van a, b of c.
Daarnaast is de noodzaak om wiskundige functies met getallen te gebruiken, zoals sinus, logaritme, enz. En wat te doen als een berekening fout gaat?

Hier vind je een beknopte beschrijving van de JavaScript-aanpak.

Gegevens ophalen uit een tekst-veld

Een tekst-veld is doorgaans onderdeel van een formulier. Een eenvoudig voorbeeld is de volgende code:

<form name="Demo">
Type hier wat ==>
<input type="text" name="Voorbeeld" value="Letters, cijfers, enz."
  size="20">
<input type="button" name="DoeHet" value="Tonen"
  onClick="DemoActie()">
</form>
Merk op dat de <form>-tag geen action= en method= attributen heeft. Die zijn voor een "lokaal" formulier niet nodig.

Als je op de knop "Tonen" drukt, wordt een JavaScript-function met de naam DemoAction() aangeroepen. Het enige wat die function doet is een alert op het scherm zetten:

<script>
function DemoActie() {
  window.alert('Ingetypte tekst is: '+document.Demo.Voorbeeld.value);
}
</script>

De alert geeft de string weer: Naam van de <form>.Naam van de <input>.value. In dit geval is dat document.Demo.Voorbeeld.value. Hiermee heb je de inhoud van het tekstveld tot je beschikking en kun er mee aan de slag.
Hieronder kun je het uitproberen.

Type hier wat ==> 

Strings omzetten in getallen

Zoals hierboven als is opgemerkt is JavaScript string-georiënteerd. Als je met getallen aan het werk moet kun je tegen situaties aanlopen waarbij een speciale ingreep noodzakelijk is. Een voorbeeld is het opgeven van een bestelling ("Doet U mij maar 5 van die rollen stippeltjesbehang"). Je moet dan zeker zijn dat er alleen cijfers worden ingegeven en geen letters.


Naast het hierboven genoemde heeft het object Number nog de volgende constanten beschikbaar:
Number.MAX_VALUE Grootst mogelijke numerieke waarde
Number.MIN_VALUE Kleinst mogelijke numerieke waarde
Number.NEGATIVE_INFINITY - oneindig
Number.POSITIVE_INFINITY + oneindig

"Reserved words"
Je kunt in JavaScript niet zomaar elke naam gebruiken als naam voor een variabele of function. JavaScript kent een aantal namen die gereserveerd zijn voor de taal zelf. Zo kun je var niet inzetten als naam voor een variabele of function. Zie het item Reserved words in JavaScript voor een redelijk compleet overzicht.

Rekenkundige en logische operatoren

De site www.w3schools.com geeft een "strikte" opsomming van bestaande operatoren. Hierbij zitten dus ook zaken als () en delete. Feitelijk voeren die geen bewerking uit op data. maar starten die een programma-actie.
De verwerkingsrichting van een JavaScript opdracht is niet noodzakelijk van Rechts naar Links. Bewerkingen met dezelfde prioriteit worden van Links naar Rechts uitgevoerd. De verwerkingsprioriteit ("Meneer Van Dalen Wacht Op Antwoord") staat erbij. Hoe hoger de prioriteit is, hoe eerder een bewerking wordt uitgevoerd bij de uitwerking van de hele opdracht.
Op het moment dat dit wordt geschreven (mei 2024) kent JavaScript 18 opeenvolgende prioriteiten, waarvan 18 de hoogste en 1 de laagste is. Voor een uitgebreide beschrijving van deze dingen verwijs ik naar bovengenoemde pagina op w3schools.com.

De bibliotheek Math

JavaScript bevat een standaard-object met de naam Math, waarmee een aantal wiskundige functies en constanten beschikbaar wordt gesteld. Math bevat alleen statische functies en gedraagt zich daardoor als een "gewone" functie-bibliotheek.

Beschikbare constanten zijn:

Constante Betekenis
E Constante van Euler (e = 2.7182818...)
LN10 Natuurlijk logaritme van 10 (= 2.3025...)
LN2 Natuurlijk logaritme van 2 (= 0.6931...)
LOG10E Logaritme van e, gebaseerd op grondtal 10 (= 0.4342...)
LOG2E Logaritme van e, gebaseerd op grondtal 2 (= 1.4426...)
PI Cirkelgetal, pi = 3.1415...
SQRT1_2 Vierkantswortel van ½ (= 0.7071...)
SQRT2 Vierkantswortel van 2 (= 1.4142...)

Beschikbare functies (methodes) zijn:

Functie Doel
abs(x) Absolute waarde van x: Waarde zonder minteken
sign(x) Teken van x: 1 voor positief, 0 voor nul, -1 voor negatief
trunc(x) Integer deel van x: Deel van x zonder decimalen
clz32(x) Geeft het aantal voorloopnullen in de 32-bits representatie van een geheel, niet negatief getal x
Een negatief getal geeft altijd nul
round(x) "Gewone" afronding naar dichtstbijzijnde gehele getal
Math.round(1.4) = 1; Math.round(1.5) = 2
fround(x) Afronding naar dichtstbijzijnde 32-bits representatie van een floating point getal
ceil(x) Afronding naar boven. Math.ceil(1.1) = 2
floor(x) Afronding naar beneden. Math.floor(1.9) = 1
max(x1, … , xn) Bepaal de grootste van waarden x1, … , xn
min(x1, … , xn) Bepaal de kleinste van waarden x1, … , xn
log(x) Natuurlijk logaritme van x, dus gebaseerd op het grondtal e
log1p(x) Natuurlijk logaritme van 1 + x
log2(x) Logaritme van x, gebaseerd op het grondtal 2
log10(x) Logaritme van x gebaseerd op het grondtal 10
exp(x) Berekent ex
expm1(x) Berekent ex - 1. Dit is nauwkeuriger dan exp(x) - 1
random() Geeft een pseudo-willekeurig getal y, 0 ≤ y < 1
sin(x) Bepaal de sinus van de hoek x, x in radialen
cos(x) Bepaal de cosinus van de hoek x, x in radialen
tan(x) Bepaal de tangens van de hoek x, x in radialen
asin(x) Bepaal de arcsinus van x (radialen)
acos(x) Bepaal de arccosinus van x (radialen)
atan(x) Bepaal de arctangens van x (radialen)
atan2(x,y) Bepaal de arctangens van x / y (radialen)
sinh(x) Bepaal de sinus hyperbolicus van x
cosh(x) Bepaal de cosinus hyperbolicus van x
tanh(x) Bepaal de tangens hyperbolicus van x
asinh(x) Bepaal de arcsinus hyperbolicus van x
acosh(x) Bepaal de arccosinus hyperbolicus van x
atanh(x) Bepaal de arctangens hyperbolicus van x
pow(x,y) Bepaal xy
sqrt(x) Bepaal de vierkantswortel van x
cbrt(x) Bepaal de derdemachtswortel van x

Gebruik van Math

De code om bv. de constante van Euler e (= 2.7182818...) te gebruiken is:

y = Math.E;

De function Math.random() gebruik je het beste in combinatie met Math.ceil() of Math.floor():
Voor een random getal y in de reeks van 0 tot en met 999 gebruik je:

y = Math.floor(Math.random()*1000)

Voor een random getal z in de reeks van 1 tot en met 10 gebruik je:

z = Math.ceil(Math.random()*10)

De code om bijv. de sinus van een getal x te bepalen is:

y = Math.sin(x);

De trigionometrische functies (sin, cos, tan) werken met radialen, niet met graden. De inverse functies (asin, acts, atan) geven radialen terug.
X graden omrekenen naar Y radialen doe je met: Y = X * Math.PI / 180
X radialen omrekenen naar Y graden doe je met: Y = X / Math.PI * 180

 
terug

html-039; Laatste wijziging: 17 mei 2024