Variabili reali

Le variabili intere possono -per definizione- contenere solo valori interi. Questo chiaramente crea dei problemi nel caso in cui i valori o i risultati delle espressioni possono essere non interi. Il seguente programma DivisioneIntera.java illustra questi problemi.

/*
  In questo programma si fa la divisione di due variabili intere
*/

class DivisioneIntera {
  public static void main(String[] args) {
    int a,b,c;

    a=22;
    b=8;

    c=a/b;

    System.out.println("Il risultato della divisione e': "+c);
  }
}


Se si compila ed esegue il programma, viene stampata la seguente linea:

Il risultato della divisione e': 2

Questo risultato è impreciso, visto che 22/8=2.75 Il problema è che il risultato della divisione 22/8 viene memorizzato nella variabile c, che è stata dichiarata per contenere solo variabili di tipo intero. Per risolvere questo problema, il valore che viene memorizzato in c è la parte intera del risultato della espressione, ossia quello che sta prima della virgola decimale. Nel nostro caso, il risultato era 2.75, per cui viene memorizzato solo il 2.

Se si devono eseguire dei calcoli di cui si vuole conoscere anche il valore dei decimali, è necessario usare variabili di tipo reale. Contrariamente a quello che ci si aspetta, una variabile reale viene dichiarata usando una linea double nomevariabile; Il programma DivisioneReale.java è una versione modificata del precedente, in cui si usano variabile reali invece che intere.

/*
  In questo programma si fa la divisione di due variabili reali
*/

class DivisioneReale {
  public static void main(String[] args) {
    double a,b,c;

    a=22;
    b=8;

    c=a/b;

    System.out.println("Il risultato della divisione e': "+c);
  }
}


Il risultato stampato questa volta contiene anche le cifre decimali. In generale, se si pensa che il risulato di una espressione potrebbe contenere cifre decimali, è bene usare variabili reali invece che intere.

Nota sulle conversioni

Si consideri il seguente programma di divisione: DivisioneIntera2.java, riportato qui sotto.

/*
  In questo programma si fa la divisione di due variabili intere
*/

class DivisioneIntera2 {
  public static void main(String[] args) {
    int a,b;
    double c;

    a=22;
    b=8;

    c=a/b;

    System.out.println("Il risultato della divisione e': "+c);
  }
}


In base a quanto detto finora, il risultato dovrebbe essere corretto: si calcola a/b, e il risultato si mette nella variabile reale c. Quello che succede compilando ed eseguendo il programma è che viene stampato ancora il valore 2, ossia solo la parte intera della divisione.

La spiegazione richiede di addentrarsi nei meccanismi di conversione dei tipi usato da Java. Quando è necessario fare una divisione fra due variabili, se entrambe sono intere allora la divisione produce un risultato intero. In altre parole, la divisione a/b produce sempre un risultato intero (approssimato), indipendentemente dall'uso che si fa di questo risultato, se a e b sono variabili di tipo intero.