1. doubletip

Java oferă doubletipul pentru lucrul cu numere reale (fracționale). Ocupă 8 bytesîn memorie (de două ori mai multe decât inttipul) și poate stoca valori în intervalul de la . Pentru comparație: tipul poate stoca o valoare în intervalul de la până la .-1.7*10308+1.7*10308int-2*109+2*109

În numerele reale, partea fracțională se scrie după virgulă. De exemplu, 123.456, sau 2.5, sau 100.00 sau 0.01. Când computerele se ocupă de astfel de numere, le numim numere în virgulă mobilă .

Apropo, pe lângă doubletip, mai avem și floattipul (care are o dimensiune de doar 4 octeți). Numele său vine de la virgulă flotantă . Iar numele doublevine de la double float . A doubleeste de două ori mai mare decât a float: 8 bytesversus 4. Se mai numește și număr în virgulă mobilă cu precizie dublă .


2. Crearea unui doubletip

Tipul dublu este folosit pentru a stoca numere reale. Pentru a crea o variabilă în cod care poate stoca numere reale, trebuie să utilizați o declarație ca aceasta:

double name;
Crearea unui doubletip

Unde nume este numele variabilei. Exemple:

Afirmație Descriere
double price;
priceSe creează o variabilă reală
double weight;
weightSe creează o variabilă reală
double lightSpeed;
lightSpeedSe creează o variabilă reală

Ca și în cazul inttipului, puteți folosi prescurtarea pentru a crea mai multe doublevariabile simultan:

double name 1, name 2, name 3;
Crearea mai multor doublevariabile

Și chiar le atribuiți imediat valori:

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
Crearea și inițializarea mai multor doublevariabile

Exemple:

Afirmație Notă
double price = 5.0;
Variabila stochează5.0
double weight = 2;
Variabila stochează2.0
double x = 1.0, y = 2.0, z = 3.0;

3. Atribuirea numerelor întregi și reale

Ar fi rău dacă numerele întregi ar putea fi alocate doar intvariabilelor, iar numerele reale - numai doublevariabilelor. Vrem să putem face conversia între cele două tipuri de numere. Și Java oferă această abilitate.

În primul rând, atât numerele reale, cât și numere întregi pot fi atribuite doublevariabilelor. Când se atribuie numere întregi, acestea sunt pur și simplu convertite în numere reale. Desigur, o anumită precizie se poate pierde în proces.

Afirmație Notă
double price = 5.0;
Variabila stochează5.0
double weight = 2;
Variabila stochează2.0
int t = 1000;
double x =  t * t;

Variabila xstochează1000000.0

În al doilea rând, dacă într-o expresie sunt implicate un număr întreg și un număr real, atunci numărul întreg este mai întâi convertit într-un număr real și abia apoi se efectuează operația cu celălalt număr real.

Afirmație Notă
int t = 1000;
double x = t * 5.0;

Variabila xstochează5000.0
System.out.println(5 * 2);
Numărul 10va fi afișat pe ecran
System.out.println(5 * 2.0);
Numărul 10.0va fi afișat pe ecran

Și, în sfârșit, este, de asemenea, posibil să atribuiți numere reale intvariabilelor. Când facem acest lucru, partea fracțională a numărului real este aruncată - numărul este rotunjit în jos la cel mai apropiat număr întreg.

În plus, compilatorul cere programatorului să documenteze în mod explicit ceea ce se întâmplă (pentru a fi siguri că alți programatori înțeleg că partea fracțională este abandonată). În general, o astfel de conversie arată astfel în cod:

integer_variable = (int)(real_number);
Atribuirea unui număr real unei intvariabile

Exemple:

Afirmație Notă
int x = (int)(5.5);
Variabila xstochează5
double a = 5.999;
int x = (int)(a);
Variabila xstochează5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
Variabila xstochează11


4. Împărțirea numerelor întregi și reale în Java

La împărțirea unui număr întreg la un număr întreg, restul este întotdeauna eliminat. Atunci cum putem împărți 5pentru 2a obține 2.5?

La început, se pare că opțiunea corectă este:

double d = 5 / 2;

Dar nu este atât de simplu. Problema aici este că mașina Java calculează mai întâi valoarea 5 / 2și abia apoi atribuie rezultatul variabilei d. Și 5 / 2operația este împărțirea întregului. Aceasta înseamnă d că va conține 2sau, pentru a fi mai precis,2.0

Soluția corectă este să scrieți cel puțin unul dintre numerele implicate în împărțire ca număr real (adică cu virgulă zecimală):

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

În fiecare dintre expresii, d va conține2.5

Dar dacă lucrăm cu variabile? Dacă avem cod ca acesta?:

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

Există o soluție inteligentă (și evidentă) aici - forțați mașina Java să convertească variabilele în numere reale înmulțindu-le cu unul ca număr real ( 1.0)

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

Rețineți că înmulțirea și împărțirea au prioritate egală și sunt efectuate de la stânga la dreapta. Asta înseamnă că contează unde înmulțim 1.0.

Exemple:

Afirmație Ordin de executare Rezultat
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