Modulelessen (3/4)
Cijfers en wiskunde
In JavaScript is er slechts één numeriek type: number. Beide gehele getallen
en decimalen (floating point) staan daarin. Geen aparte int / float
zoals in andere talen.
typeof 42; // 'number'
typeof 3.14; // 'number'
typeof -0.001; // 'number'
typeof Infinity; // 'number' ← Infinity is a special number
typeof NaN; // 'number' ← even "Not a Number" is a number (!)Het globale object Math
Math is geen functie: het is een object met nuttige methoden en
constanten. Je instantiëert het niet, je gebruikt het direct:
Math.min(3, 1, 7); // 1
Math.max(3, 1, 7); // 7
Math.abs(-5); // 5
Math.round(4.5); // 5
Math.floor(4.9); // 4 (always rounds down)
Math.ceil(4.1); // 5 (always rounds up)
Math.sqrt(16); // 4
Math.pow(2, 10); // 1024 (equivalent to 2 ** 10)
Math.PI; // 3.141592653589793Willekeurige cijfers
Math.random() retourneert een decimaal tussen 0 (inbegrepen) en 1 (uitgesloten).
Om een geheel getal in een bereik te krijgen, gebruik je een kleine formule:
// Random integer between 0 and 9
Math.floor(Math.random() * 10);
// Random integer between 1 and 6 (a six-sided die)
Math.floor(Math.random() * 6) + 1;De pijn van decimalen (zwevende komma)
JS gebruikt de IEEE-754 64-bit representatie, die met bijna iedereen wordt gedeeld talen. Het is een binaire weergave, dus sommige decimalen kunnen dat niet zijn precies weergegeven:
0.1 + 0.2; // 0.30000000000000004 (!)
0.1 + 0.2 === 0.3; // falseStandaardoplossing: rond af met toFixed(n) (wat een string retourneert) of
gebruik gehele getallen in centen/duizendsten bij het werken met geld:
(0.1 + 0.2).toFixed(2); // '0.30' (string)
Number((0.1 + 0.2).toFixed(2)); // 0.3 (number)Probeer het
Bereken de oppervlakte van een cirkel met straal `r = 5`, afgerond op twee decimalen, als een `getal`. Voor `r=5` wordt 78,54 verwacht.
Toon hint
Math.PI voor pi, ** voor machtsverheffing; .toFixed(2) om af te ronden, Number(...) om terug naar een getal te converteren.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Gegeven drie getallen 12, 7, 23, retourneer als laatste uitdrukking het verschil tussen de max en de min (d.w.z. 16).
Toon hint
Math.max en Math.min accepteren meerdere door komma's gescheiden argumenten.
Oplossing beschikbaar na 3 pogingen