BigDecimal in Java: come rappresentare precisamente i numeri in virgola mobile
La classe Java BigDecimal consente di rappresentare con precisione numeri complessi in virgola mobile. Dopo essere stata creata, può essere utilizzata con vari metodi. Dato che la sintassi è strutturata sempre in modo simile, la classe BigDecimal può essere utilizzata facilmente anche da chi è agli inizi.
Cos’è BigDecimal in Java?
BigDecimal è una classe di Java che consente di visualizzare ed elaborare con estrema precisione numeri complessi in virgola mobile, teoricamente di qualsiasi dimensione. Grazie ai vari metodi presentati in questo articolo, puoi servirti di questa classe per eseguire con la massima precisione operazioni di arrotondamento, aritmetica, conversione di formato, hashing e confronti sofisticati.
La classe BigDecimal è costituita da una scala di interi a 32 bit e da un valore intero non scalato con precisione arbitraria. Per “scala” in questo caso si intende il numero di cifre dopo la virgola decimale, a patto che questo sia maggiore o uguale a zero. Tuttavia, se il valore è inferiore a zero, viene moltiplicato per “10^(-scala)”. La dimensione massima possibile della classe è limitata solo dalla memoria del computer. Questa però è una considerazione prettamente teorica, poiché è improbabile che un programma crei un numero in grado di eccedere la memoria disponibile. La classe BigDecimal di Java è destinata esclusivamente ai numeri in virgola mobile. I numeri interi vengono elaborati con la classe BigInteger.
- Disponibilità garantita al 99,99%
- Dominio, SSL ed e-mail inclusi
- Assistenza 24/7 in lingua italiana
A cosa serve questa classe?
A causa del suo elevato livello di dettaglio, per molte applicazioni la classe BigDecimal non è necessaria, ma ci sono situazioni e campi di applicazione in cui si rivela indispensabile. Un esempio sono i calcoli in cui anche la più piccola cifra decimale può fare la differenza, come le transazioni nel settore dell’e-commerce. La classe BigDecimal viene utilizzata anche per effettuare analisi statiche di precisione, ad esempio nei programmi che si occupano del controllo e della navigazione di aerei o razzi oppure nel settore medico. Sono svariati i campi in cui questa precisione di calcolo risulta preziosa al fine di assicurare la massima accuratezza possibile.
Come si crea un oggetto?
Per utilizzare BigDecimal in Java, occorre innanzitutto importare la classe nel programma Java. Una volta fatto ciò, è possibile dichiarare un oggetto di questa classe, quindi creare il valore desiderato come argomento e passarlo al costruttore Java appropriato. Dopo aver completato questo processo, potrai utilizzare la classe BigDecimal creata in Java. A questo scopo, all’interno della classe sono disponibili diversi metodi, il cui utilizzo sarà illustrato in modo più dettagliato nei prossimi paragrafi. Per prima cosa, è necessario importare la classe e dichiarare due oggetti di esempio:
/ / Il tuo programma Java per la classe BigDecimal
import java.math.BigDecimal;
public class BigDecimalEsempio
{
public static void main(String[] args)
{
/ / Crea due nuovi BigDecimal
BigDecimal EsempioUno =
new BigDecimal ("1275936001.744297361");
BigDecimal EsempioDue =
new BigDecimal ("4746691047.132719503");
}
}javaOra puoi utilizzare questi oggetti con i metodi appropriati alla classe.
Esempi di BigDecimal in Java
Una volta creati gli oggetti, puoi utilizzarli per eseguire operazioni servendoti di diversi metodi. Utilizzeremo alcuni semplici esempi per mostrarti il procedimento e quali risultati è possibile ottenere. L’output viene avviato tramite il comando Java System.out.println().
Aggiungere due BigDecimal
È possibile sommare due BigDecimal in Java con il metodo add(). Per farlo, occorre memorizzare i due valori di cui si desidera calcolare la somma. Nel nostro esempio, il valore “EsempioUno” deve essere sommato al valore “EsempioDue”. Il risultato è il seguente:
EsempioUno =
EsempioUno.add(EsempioDue);
System.out.println ("Il risultato che si desidera ottenere dopo l’aggiunta è " + EsempioUno);javaSottrarre i valori
Per sottrarre due valori tra loro, puoi utilizzare il metodo subtract(). Nell’esempio seguente, sottraiamo “EsempioDue” da “EsempioUno”. Il codice si presenta quindi così:
EsempioUno =
EsempioUno.subtract(EsempioDue);
System.out.println ("Il risultato ottenuto dopo la sottrazione è: " + EsempioUno);javaMoltiplicare i valori
Il metodo utilizzato per moltiplicare due BigDecimal in Java funziona in modo molto simile ai due precedentemente illustrati. Si chiama multiply() e utilizza l’oggetto “moltiplicatore” come argomento. Per moltiplicare “EsempioDue” per “EsempioUno”, il codice da utilizzare è il seguente:
EsempioUno =
EsempioUno.multiply(EsempioDue);
System.out.println ("Il risultato ottenuto dopo la moltiplicazione è: " + EsempioUno);javaDividere i valori
Per dividere due BigDecimals in Java, si può ricorrere al metodo divide(). Anche questo metodo segue la sintassi consueta e si presenta in questo modo:
EsempioUno =
EsempioUno.divide(EsempioDue);
System.out.println ("Il risultato ottenuto dopo la divisione è: " + EsempioUno);javaQuesto metodo funziona però solo se il risultato è un numero esatto o un numero intero. In caso contrario, viene visualizzato il seguente messaggio di errore: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.. Si tratta di un errore di esecuzione. Per evitarlo, esistono diverse opzioni di arrotondamento per il metodo divide(), che possono essere trasmesse tramite java.math.RoundingMode. Puoi scegliere tra le seguenti costanti:
| Costante | Funzione |
|---|---|
| CEILING | Arrotonda verso l’infinito positivo. |
| DOWN | Arrotonda verso lo 0. |
| FLOOR | Arrotonda verso l’infinito negativo. |
| HALF_DOWN | Arrotonda verso il numero più vicino e il numero opposto allo 0, se equidistanti. |
| HALF_EVEN | Arrotonda verso il numero più vicino e il numero pari più vicino, se equidistanti. |
| HALF_UP | Arrotonda verso il numero più vicino e verso lo 0, se equidistanti. |
| UNNECESSARY | Ignora gli arrotondamenti ed esegue solo operazioni esatte. Questa costante può essere utilizzata solo quando la divisione è esatta. |
| UP | Arrotonda lontano dallo 0. |
Una panoramica dei metodi più importanti
Ora che hai imparato come usare la classe BigDecimal in Java e come utilizzare i metodi adatti a questo scopo, ti presentiamo una panoramica di alcuni dei metodi più importanti.
| Metodo | Funzione |
|---|---|
| abs() | Restituisce BigDecimal con il valore assoluto di BigDecimal |
| add() | Restituisce BigDecimal il cui valore è composto da (this + Addend). |
| divide() | Restituisce BigDecimal il cui valore è composto da (this / Divisor). |
| max(BigDecimal val) | Restituisce il massimo di BigDecimal. |
| min(BigDecimal val) | Restituisce il minimo di BigDecimal. |
| movePointLeft(int n) | Restituisce BigDecimal in cui il punto decimale è stato spostato a sinistra del valore “n”. |
| movePointRight(int n) | Restituisce BigDecimal in cui il punto decimale è stato spostato a destra del valore “n”. |
| multiply(BigDecimal multiplicand, MathContext mc) | Restituisce BigDecimal in cui il punto decimale è stato spostato a destra del valore “n”. |
Nella nostra Digital Guide trovi molte altre informazioni sui linguaggi di programmazione più popolari, incluso Java. Ad esempio, puoi approfondire le tue conoscenze sugli operatori Java, scoprire tutto quello che c’è da sapere sulle differenze tra Java e JavaScript oppure tra Java e Python.

