back to top

Arrotondare un numero con Java

Quando si lavora con i numeri all’interno di un programma puรฒ capitare di dover gestire gli arrotondamenti. In questo post vedremo come arrotondare numeri decimali all’interno di un programma Java.

Cosa significa “arrotondare” un numero?

L’arrotondamento รจ un processo matematico finalizzato alla riduzione delle cifre significative che esprimono una quantitร . All’interno di un numero decimale la cifra meno significativa e quella piรน a destra dopo la virgola. facciamo un esempio, supponiamo di dover arrotondare questo numero:

Pubblicitร 
12,5249

Supponiamo di dover ottenere un numero con un massimo di due decimali. Per raggiungere il risultato potremmo, semplicemente, eliminare le due cifre meno significative, cioรจ quelle piรน a destra (49).

Attraverso l’arrotondamento, quindi, andremo a ridurre il numero di cifre che esprimono la quantitร  cercando di eliminare quelle meno significative, che in un numero decimale sono quelle “piรน a destra” dopo la virgola.

In matematica esistono due tipo di arrotondamento:

  • arrotondamento per difetto: anche detto troncamento, ci si limita a rimuovere le cifre decimali in eccesso rispetto a quelle desiderate, partendo ovviamente da destra (volendo ridurre a due il numero di decimali, nel nostro esempio otteniamo 12,52);
  • arrotondamento per eccesso: si eliminano le cifre decimali in eccesso rispetto a quelle desiderate e posi si aggiunge 1 alla cifra piรน a destra del numero risultante dal troncamento (nel nostro esempio otteniamo 12,53);
  • arrotonamento “puro”: il numero viene arrotondato per accesso o per difetto a seconda che il valore troncato si avvicini di piรน ad uno piuttosto che all’altro risultato (nel nostro esempio 12,52 in quanto la parte eliminata, cioรจ 0,0049, รจ piรน vicina a 0 che a 0,001).

Nell’arrotondamento “puro” si ha un problema quando la parte eliminata si trova esattamente ad essere equidistante (a esempio: 0,005); in questo caso, ovviamente, la scelta tra arrotondamento per difetto o per eccesso non puรฒ che essere arbitraria.

La classe Java.Math()

Per svolgere operazioni sui numeri รจ necessario importare nel nosro progetto java la classe Java.Math() la quale fornisce una serie di metodi per arrotondare i numeri con virgola mobile all’intero piรน vicino. I metodi in questione sono:

  • Math.round()
  • Math.floor()
  • Math.ceil()

I nomi di questi metodi sono autoesplicativi ma un esempio sarร  utile per capire meglio come funziona:

class Test {
   public static void main (String [] args) {
 
    float num = 12.5249;

    System.out.println (Math.round (num));
    System.out.println (Math.floor (num));
    System.out.println (Math.ceil (num));
  }
}

Ora proviamo ad eseguire questo codice e ad osservarne il risultato nella console:

13
12.0
13.0

Math.round()

Questo metodo arrotonda un numero all’intero piรน vicino. Nell’esempio abbiamo 12,5249 ed il metodo restituisce 13, perchรฉ 13 รจ il numero intero piรน vicino. Se avessimo arrotondato 12,4249 con questo metodo avremmo ottenuto 12 perchรฉ 12 รจ il numero intero piรน vicino a 12,4249.

E’ importante ricordare che questo metodo restituisce un valore di tipo int (ovvero un numero intero) per questo motivo il metodo restituisce 13 invece di 13.0!

Math.floor()

Questo metodo arrotonda un numero per difetto all’intero piรน vicino. Il numero di partenza รจ 12,5249 e il numero piรน vicino verso il basso รจ 12. Se arrotondassimo il numero 12,9999 con l’aiuto di questo metodo otterremmo sempre 12, perchรฉ 12 รจ il numero piรน vicino verso il basso.

Il metodo Math.floor() restituisce un valore di tipo double per questo motivo il risultato sarร  12.0 e non 12.

Math.ceil()

Questo metodo arrotonda un numero per eccesso al numero intero piรน vicino. Il numero di partenza รจ 12,5249 e il numero piรน vicino verso l’alto รจ 13. Anche se avessimo avuto come numero di partenza 12,0001 il risultato sarebbe stato comunque 13, perchรฉ รจ sempre e comunque il numero piรน vicino.

Esattamente come il metodo Math.floor(), anche Math.ceil() restituisce un valore di tipo double.

Arrotondamento con decimali

Nell’esempio precedente abbiamo visto come arrotondare all’intero. Ma a volte potrebbe presentarsi l’esigenza di arrotondare mantenendo ugualmente un certo numero di decimali. Si pensi, ad esempio, agli arrotondamenti degli importi in Euro. In questo caso si potrebbe voler arrotondare un prezzo mantenendo comunque 2 cifre decimali.

Per raggiungere questo risultato ci sono piรน strade, una di queste prevede l’utilizzo di Math.round(), che come abbiamo giร  visto consete di effettuare arrotondamenti all’intero. Vediamo subito il codice:

class Test {
   public static void main (String [] args) {
 
    double num = 12.5249;
    double dueDecimali = Math.round(num*100.0)/100.0;
    System.out.println (dueDecimali);

  }
}

Il risultato sarร :

12.52

In pratica si usa un “trucchetto”: il numero, prima di essere arrotondato, viene moltiplicato per cento e, dopo l’arrotondamento, diviso nuovamente per 100… ottenendo coรฌ un numero con due decimali.

Se avessimo voluto avere un numero con tre decimali avremmo usato 1.000 al posto di 100; con quattro decimali 10.000 al posto di 100 e cosรฌ via.

Differenza tra float e double

Una nota conclusiva: negli esempi di questo articolo ho utilizzato sia il dataType float che double… entrambi rappresentano un numero a virgola mobile (“floating point”)… ma che differenza c’รจ tra questi due tipi di dato?

La differenza tra i due DataType รจ legata al livelo di precisione: attraverso float, infatti, รจ possibile esprimere numeri con un massimo di 6 cifre decimali mentre con double possiamo indicarne fino a 15!

Altri contenuti interessanti

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Vibe Coding: cosโ€™รจ, come funziona e quali sono i migliori strumenti AI per programmare

Immagina di poter scrivere software senza dover digitare una...

I migliori libri per imparare a programmare in Python

Imparare a programmare in Python รจ un passo fondamentale...

Il file manifest.json: cos’รจ e a cosa serve

Il file manifest.json รจ un componente chiave nelle applicazioni web moderne,...

Java: cos’è e a cosa serve l’operatore modulo (%)

In Java, l'operatore modulo è rappresentato dal simbolo "%"...

Radice quadrata in C: vediamo come calcolarla in diversi modi

La radice quadrata è un'operazione matematica piuttosto comune (in...

Sperimentare la sequenza di Collatz in C++

Vediamo come verificare la congettura di Collatz con C++....
Pubblicitร