L'oggettoMath mette a disposizione dello sviluppatore JavaScript numerose funzioni e costanti matematiche; è un oggetto particolare, in quanto non richiede di lavorare su istanze di oggetti ma permette di accedere ai suoi metodi usando la notazione:
Math.nome_metodo();Math.nome_proprietà
Le proprietà dell'oggetto Math consistono in diverse costanti matematiche:
PI: restituisce il valore approssimato diPi grecoE: restituisce il valore dellacostante matematica ELN2 eLN10: il valore dellogaritmo naturale di 2 e di 10Ovviamente sono tutte proprietà di sola lettura
Ecco una lista dei metodi corrispondenti alle principali funzioni matematiche e trigonometriche:
abs(): restituisce ilvalore assoluto (o modulo) del numero fornito come argomentomin() emax(): restituiscono il minimo e il massimo tra i due numeri passati come parametrisqrt() epow(b,n): restituiscono la radice quadrata del numero passato o l'nesima potenza del numerobsin(),cos() etan(): restituiscono ilseno, ilcoseno e latangente trigonometrica dell'angolo passato in radiantilog(): restituisce il logaritmo naturale in base del numero passato come parametroPer l'arrotondamento l'oggetto Math mette a disposizione tre metodi:
ceil(): arrotonda il numero al numero intero maggiore più vicino (per eccesso). Ad esempio:Math.ceil(10.01)//restituisce 11Math.ceil(-6.3)//restituisce -6
floor(): arrotonda l'oggetto al numero intero minore più vicino (per difetto). Ad esempio:Math.floor(10.01)//restituisce 10Math.floor(-6.3)//restituisce -7
round(): arrotonda l'oggetto per eccesso se la parte decimale è maggiore o uguale a 5, altrimenti arrotonda per difetto:Math.round(10.01)//restituisce 10Math.round(-6.3)//restituisce -6Math.round(2.5)//restituisce 3
Tutte queste tre funzioni differiscono daparseInt() che non arrotonda i numeri, bensì li tronca. Ad esempio:
Math.parseInt(10.01)//restituisce 10Math.parseInt(-6.3)//restituisce -6Math.parseInt(2.5)//restituisce 2
L'uso di Math permette anche di generare numeri(pseudo) casuali tramite il metodo:
Math.random()
che restituisce un numero casuale decimale compreso tra 0 (incluso) e 1 (escluso). Nella pratica non è molto utile se non viene trasformato in un numero intero. Ad esempio questo codice simula il lancio di un dado:
varnumLanci=prompt("Quanti lanci vuoi effettuare?",10);vari;varlancio;for(i=0;i<numLanci;i++){lancio=Math.floor(Math.random()*6+1);alert("Lancio "+(i+1)+": "+lancio);}
La riga che ci interessa è quella dell'assegnazione della variabilelancio. Per capire l'algoritmo usato, ragioniamo sul risultato che vogliamo ottenere.
Il numero che vogliamo ottenere (che chiameremod) deve essere un numero intero compreso tra 1 e 6 inclusi. Dal momento che il generatore restituisce numeri tra 0 incluso e 1 escluso, dovremo:
Di seguito viene mostrata un'applicazione pratica dei metodi dell'oggetto Math per la creazione di una funzione che arrotondi le cifre allanesima cifra decimale indicata.
functionarrotonda(num,dec,mod){vardiv=Math.pow(10,dec);switch(mod){case'e':case'E'://arrotonda per eccessoreturnMath.ceil(num*div)/div;break;case'd':case'D'://arrotonda per difettoreturnMath.floor(num*div)/div;break;case't':case'T'://troncamentoreturnparseInt(num*div)/div;break;case'a':case'A':default://arrotondareturnMath.round(num*div)/div;}}//per testarla usiamo queste righe di codice...alert(arrotonda(3.43,1,'t'));alert(arrotonda(3.42,1,'e'));alert(arrotonda(3.469,2,'d'));alert(arrotonda(3.427,2,'e'));alert(arrotonda(3.55,1,'a'));alert(arrotonda(3.46,1,'t'));
La funzione appena mostrata arrotonda il numero fornito come primo parametro alla cifra decimale fornita come secondo parametro usando diversi metodi di arrotondamento. Il tutto sta nel fatto che le funzioni di Math agiscono solo sui numeri interi e non su quelli decimali.
Per effettuare gli arrotondamenti, quindi, spostiamo la virgola din posizioni decimali fornite come parametro ed eseguiamo l'arrotondamento desiderato; successivamente, spostiamo di nuovo la virgola all'indietro. Per spostare la virgola è sufficiente moltiplicare e dividere per una potenza di dieci: per fare ciò ci serviamo del metodoMath.pow()