Numeri Interi e Float - Tipi di dati in PHP
In PHP, i tipi di dati interi (integer) rappresentano numeri interi senza decimali. Possono essere positivi, negativi o zero.
Il tipo di dato float (abbreviazione di "floating point") rappresenta un numero a virgola mobile. In altre parole, è un tipo di dato utilizzato per rappresentare valori numerici con decimali.
Indice
// Interi (integer)
$numero_intero = 8;
// Float (float)
$numero_decimale = 9.15;
// Stringa
$stringa = 'testo';
$stringa_num ='5';
Come controllare la tipologia di dati:
Per controllare se una variabile è di un certo tipo, PHP ci mette a disposizione una serie di funzioni native ad esempio, se vogliamo sapere se una variabile contiene un valore numerico valido, possiamo usare la funzione is_numeric()
$test_num_int = is_numeric($numero_intero);
$test_num_dec = is_numeric($numero_decimale);
$test_num_str = is_numeric($stringa);
$test_num_str_num = is_numeric($stringa_num);
var_dump($test_num_int); //output : bool(true)
var_dump($test_num_dec); //output : bool(true)
var_dump($test_num_str); //output : bool(false)
var_dump($test_num_str_num); /* output : bool(true) : ↓
/* questo perchè PHP è un linguaggio dinamicamente tipizzato,
quindi nonostante 5 sia racchiuso negli apici e quindi è una
stringa a tutti gli effetti, PHP lo rileva come un numero di tipo stringa.
*/
Controllo su numero intero o decimale:
Per controllare se una variabile è intera o decimale, PHP ci mette a disposizione le funzioni:
- is_int() - per cotrollare se è un numero intero;
- is_float() - per controllare se è un numero decimale;
//controllo numeri interi
$controllo_num_int = is_int($numero_intero);
$controllo_num_dec = is_int($numero_decimale);
var_dump($controllo_num_int); // output: bool(true) : è vero perchè è un numero intero
var_dump($controllo_num_dec);// output: bool(false) : è falso perchè è un numero decimale
//controllo numeri decimali
$controllo_num_int_2 = is_float($numero_intero);
$controllo_num_dec_2 = is_float($numero_decimale);
var_dump($controllo_num_int_2); // output: bool(false) : è falso perchè è un numero intero
var_dump($controllo_num_dec_2); // output: bool(true) : è vero perché è un numero decimale
Operazioni Aritmetiche
Per effettuare operazioni aritmetiche tra valori numerici o tra variabili che contengono valori numerici utilizziamo gli operatori aritmetici di PHP, ad esempio : + - / %
// esempio addizione
echo 2 + 1.5; // output : 3.5
// esempio sottrazine
echo 2 - 1.5; // output : 0.5
// esempio moltiplicazione
echo 2 * 1.5; // output : 3
// esempio divisione
echo 2 / 1.5; // output : 1.33
// esempio di modulo (parte intera rimanente di una divisione)
echo 10 % 3 ; // output : 1.33
// esempio elevazione numero ad una potenza
echo 2 ** 3 ; // output : 8
Confronto tra numeri float
Quando facciamo un confronto dei numeri float dobbiamo prestare attenzione, poiché dobbiamo mettere in considerazione che il nostro dispositivo ragiona in termini binari (stesso standard di javascript) e non aritmetici come verrebbe naturale a noi esseri umani. Facciamo un esempio:
<?php
// confronto tra numeri float
$x = 0.1 + 0.2;
$y = 0.3;
$test = $x == $y ;
var_dump($test); // output: bool(false)
?>
Come possiamo vedere nonostante per noi il valore di $x ed $y siano uguali, per PHP non è cosi (poiché ragiona in termini binari), quindi se stiamo costruendo un applicazione dove bisogna confrontare due numeri con virgola e vogliamo essere sicuri, dobbiamo aggirare il problema.
Se vogliamo confrontare in modo sicuro dei numeri float, possiamo pensare di utilizzare un delta. Cioè possiamo considerare un delta massimo entro il quale possiamo considerare i valori float uguali.
<?php
// confronto tra numeri float
$x = 0.1 + 0.2;
$y = 0.3;
// definiamo un numero entro il quale possiamo considerare uguali i due numeri
$delta = 0.00001;
// conserviamo all'interno di una variabile la differenza in valore assoluto tra x e y
$diff = abs($x - $y);
if($diff < $delta) {
echo " Le variabili x e y sono uguali ";
} else {
echo " Le variabili x e y non sono uguali";
};
?>
Arrotondare i numeri con ceil, floor e round
In PHP, possiamo arrotondare i numeri usando le funzioni ceil
, floor
e round
. Ecco come funzionano:
ceil
arrotonderà il numero al numero intero più vicino verso l'alto.
Ad esempio,ceil(4.3)
restituirà5
, mentreceil(9.999)
restituirà10
.floor
arrotonderà il numero al numero intero più vicino verso il basso.
Ad esempio,floor(4.3)
restituirà4
, mentrefloor(9.999)
restituirà9
.round
arrotonderà il numero al numero intero più vicino.
Ad esempio,round(4.3)
restituirà4
, mentreround(9.999)
restituirà10
.
$num = 4.3;
echo ceil($num); // Output: 5
echo floor($num); // Output: 4
echo round($num); // Output: 4
$num = 9.999;
echo ceil($num); // Output: 10
echo floor($num); // Output: 9
echo round($num); // Output: 10
Scegliere il numero più piccolo ed il più grande in un insieme di numeri con min() e max()
Possiamo trovare il valore minimo o massimo in un insieme di numeri, come ad esempio in un array, usando le funzioni min
e max
. Ecco come funzionano:
min
restituisce il valore minimo in un insieme di numeri. Ad esempio,min(4, 5, 6, 7)
restituirà4
.max
restituisce il valore massimo in un insieme di numeri. Ad esempio,max(4, 5, 6, 7)
restituirà7
.
Facciamo un esempio
$numeri = [4,5,6,7];
$minore = min($numeri);
$maggiore = max($numeri);
echo $maggiore; // Output: 7
echo $minore; // Output: 4
$altrinumeri = array(-1, -5, 0, 3);
echo min($altrinumeri); // Output: -5
echo max($altrinumeri); // Output: 3
Come generare numeri casuali all'interno di un range di numeri
Se abbiamo la necessità di creare un numero randomico all'interno di un range di numeri possiamo utilizzare la funzione rand() integrata di PHP. Facciamo un Esempio:
$numero_casuale = rand(5,100);
echo $numero_casuale; // output : numero casuale tra 5 e 100 (5 e 100 inclusi)