Calcoli con virgola, precisi e finanziari in Java

Se nella nostra applicazione Java dobbiamo fare calcoli in cui abbiamo numeri con la virgola, tipo calcoli scientifici e calcoli finanziari non dobbiamo utilizzare mai i tipi di dato a virgola mobile come float e double in quanto la loro rappresentazione in binario non riesce ad essere precisa e quindi presenta piccoli problemi di arrotondamento. Ad esempio, non esiste una rappresentazione precisa nel sistema decimale di 1/3 come non esiste una rappresentazione precisa di 1/10 in binario..

Vediamo un esempio:

/**
 * @author Alessandro Musacchio
 *
 */
public class Numeri {
	public static void main(String[] args) {
		double a = 2.0000001d;
		double b = 1.0000001d;
		System.out.print("Calcolo con i double: ");
		System.out.println(a - b);
		float af = 2.0000001f;
		float bf = 1.0000001f;
		System.out.print("Calcolo con i float: ");
		System.out.println(af - bf);
	}
}

Il risultato che danno entrambi i calcoli se eseguiti su un PC sono errati in quanto l’unico risultato ammisibile è: 1 senza alcun arrotondamento!

Vediamo ora come Java con gli ogetti BigDecimal ci permette di fare calcoli con la “massima” precisione:

import java.math.BigDecimal;
/**
 * @author Alessandro Musacchio
 *
 */
public class Numeri {
	public static void main(String[] args) {
		BigDecimal aBD = new BigDecimal("2.0000001");
		BigDecimal bBD = new BigDecimal("1.0000001");
		System.out.print("Calcolo con i BigDecimal: ");
		System.out.println(aBD.subtract(bBD));
	}
}

Eseguendo questo pezzo di codice invece vedremo il risultato esatto!

Se ti è stato utile il mio articolo, spendi un secondo del tuo tempo e dammi un +1, Google ed io ne saremmo felici 🙂 Grazie mille 🙂

Leave a Reply

Your email address will not be published.

one × 1 =

This site uses Akismet to reduce spam. Learn how your comment data is processed.