1. doubledigitare

Java fornisce il doubletipo per lavorare con numeri reali (frazionari). Occupa 8 bytesin memoria (il doppio rispetto al inttipo) e può memorizzare valori nell'intervallo da a . Per confronto: il tipo può memorizzare un valore nell'intervallo da a .-1.7*10308+1.7*10308int-2*109+2*109

Nei numeri reali la parte frazionaria si scrive dopo la virgola. Ad esempio, 123,456 o 2,5 o 100,00 o 0,01. Quando i computer gestiscono tali numeri, li chiamiamo numeri in virgola mobile .

A proposito, oltre al doubletipo, abbiamo anche il floattipo (che ha una dimensione di soli 4 byte). Il suo nome deriva da virgola mobile . E il nome doublederiva da double float . A doubleè grande il doppio di a float: 8 bytescontro 4. È anche chiamato numero a virgola mobile a precisione doppia .


2. Creazione di un doubletipo

Il tipo double viene utilizzato per memorizzare numeri reali. Per creare una variabile nel codice in grado di memorizzare numeri reali, è necessario utilizzare un'istruzione come questa:

double name;
Creazione di un doubletipo

Dove nome è il nome della variabile. Esempi:

Dichiarazione Descrizione
double price;
priceViene creata una variabile reale
double weight;
weightViene creata una variabile reale
double lightSpeed;
lightSpeedViene creata una variabile reale

Come con il inttipo, puoi usare la scorciatoia per creare più doublevariabili contemporaneamente:

double name 1, name 2, name 3;
Creazione di più doublevariabili

E anche assegnare immediatamente valori a loro:

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
Creazione e inizializzazione di più doublevariabili

Esempi:

Dichiarazione Nota
double price = 5.0;
La variabile memorizza5.0
double weight = 2;
La variabile memorizza2.0
double x = 1.0, y = 2.0, z = 3.0;

3. Assegnazione di numeri interi e numeri reali

Sarebbe brutto se gli interi potessero essere assegnati solo alle intvariabili e i numeri reali solo alle doublevariabili. Vogliamo essere in grado di convertire tra i due tipi di numeri. E Java fornisce questa capacità.

Innanzitutto, sia i numeri reali che quelli interi possono essere assegnati alle doublevariabili. Quando si assegnano numeri interi, vengono semplicemente convertiti in numeri reali. Naturalmente, una certa accuratezza potrebbe essere persa nel processo.

Dichiarazione Nota
double price = 5.0;
La variabile memorizza5.0
double weight = 2;
La variabile memorizza2.0
int t = 1000;
double x =  t * t;

La xvariabile memorizza1000000.0

In secondo luogo, se un numero intero e un numero reale sono coinvolti in un'espressione, allora il numero intero viene prima convertito in un numero reale e solo allora viene eseguita l'operazione con l'altro numero reale.

Dichiarazione Nota
int t = 1000;
double x = t * 5.0;

La xvariabile memorizza5000.0
System.out.println(5 * 2);
Il numero 10verrà visualizzato sullo schermo
System.out.println(5 * 2.0);
Il numero 10.0verrà visualizzato sullo schermo

E infine, è anche possibile assegnare numeri reali alle intvariabili. Quando lo facciamo, la parte frazionaria del numero reale viene scartata: il numero viene arrotondato per difetto al numero intero più vicino.

Inoltre, il compilatore richiede al programmatore di documentare esplicitamente ciò che sta accadendo (per essere sicuri che gli altri programmatori capiscano che la parte frazionaria è stata eliminata). In generale, una tale conversione appare così nel codice:

integer_variable = (int)(real_number);
Assegnare un numero reale a una intvariabile

Esempi:

Dichiarazione Nota
int x = (int)(5.5);
La xvariabile memorizza5
double a = 5.999;
int x = (int)(a);
La xvariabile memorizza5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
La xvariabile memorizza11


4. Dividere interi e numeri reali in Java

Quando si divide un numero intero per un numero intero, il resto viene sempre scartato. Come possiamo quindi dividere 5per 2ottenere 2.5?

All'inizio, sembra che l'opzione corretta sia:

double d = 5 / 2;

Ma non è così semplice. Il problema qui è che la macchina Java prima calcola il valore di 5 / 2e solo successivamente assegna il risultato alla dvariabile. E l' 5 / 2operazione è la divisione di interi. Ciò significa d che conterrà 2o, per essere più precisi,2.0

La soluzione corretta è scrivere almeno uno dei numeri coinvolti nella divisione come un numero reale (cioè con una virgola decimale):

double d = 5.0 / 2;
double d = 5 / 2.0;
double d = 5.0 / 2.0;

In ciascuna delle espressioni, d conterrà2.5

Ma cosa succede se lavoriamo con le variabili? E se avessimo un codice come questo?:

int a = 5;
int b = 2;
double d = a / b;

C'è una soluzione chiara (e ovvia) qui: forza la macchina Java a convertire le variabili in numeri reali moltiplicandole per uno come un numero reale ( 1.0)

int a = 5;
int b = 2;
double d = a * 1.0 / b;

Si noti che la moltiplicazione e la divisione hanno la stessa precedenza e vengono eseguite da sinistra a destra. Ciò significa che conta dove moltiplichiamo l'1.0.

Esempi:

Dichiarazione Ordine di esecuzione Risultato
int a = 5;
int b = 2;
double d = 1.0 * a / b;
(1.0 * a) / b; 2.5
int a = 5;
int b = 2;
double d = a * 1.0 / b;
(a * 1.0) / b; 2.5
int a = 5;
int b = 2;
double d = a / b * 1.0;
(a / b) * 1.0; 2.0