1. doubleвид

Java предоставя doubleтипа за работа с реални (дробни) числа. Той заема 8 bytesпамет (два пъти повече от intтипа) и може да съхранява стойности в диапазона от до . За сравнение: типът може да съхранява стойност в диапазона от до .-1.7*10308+1.7*10308int-2*109+2*109

При реалните числа дробната част се записва след десетичната запетая. Например 123,456, or 2,5, or 100,00, or 0,01. Когато компютрите работят с такива числа, ние ги наричаме числа с плаваща запетая .

Между другото, освен типа double, имаме и floatтипа (който е с размер само 4 byteа). Името му идва от плаваща запетая . И името doubleидва от double float . A doubleе два пъти по-голямо от a float: 8 bytesспрямо 4. Нарича се още число с плаваща запетая с двойна точност .


2. Създаване на doubleтип

Двойният тип се използва за съхраняване на реални числа. За да създадете променлива в code, който може да съхранява реални числа, трябва да използвате израз като този:

double name;
Създаване на doubleтип

Където име е името на променливата. Примери:

Изявление Описание
double price;
priceСъздава се реална променлива
double weight;
weightСъздава се реална променлива
double lightSpeed;
lightSpeedСъздава се реална променлива

Както при intтипа, можете да използвате стенограма за създаване на множество doubleпроменливи едновременно:

double name 1, name 2, name 3;
Създаване на множество doubleпроменливи

И дори веднага да им присвоите стойности:

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
Създаване и инициализиране на множество doubleпроменливи

Примери:

Изявление Забележка
double price = 5.0;
Променливите магазини5.0
double weight = 2;
Променливите магазини2.0
double x = 1.0, y = 2.0, z = 3.0;

3. Задаване на цели и реални числа

Би било лошо, ако целите числа могат да се приписват само на intпроменливи, а реалните числа - само на doubleпроменливи. Искаме да можем да конвертираме между двата вида числа. И Java предоставя тази възможност.

Първо, Howто реални, така и цели числа могат да бъдат присвоени на doubleпроменливи. Когато се задават цели числа, те просто се преобразуват в реални числа. Разбира се, част от точността може да се загуби в процеса.

Изявление Забележка
double price = 5.0;
Променливите магазини5.0
double weight = 2;
Променливите магазини2.0
int t = 1000;
double x =  t * t;

Променливите xмагазини1000000.0

Второ, ако цяло число и реално число са включени в няHowъв израз, тогава цялото число първо се преобразува в реално число и едва след това се извършва операцията с другото реално число.

Изявление Забележка
int t = 1000;
double x = t * 5.0;

Променливите xмагазини5000.0
System.out.println(5 * 2);
Номерът 10ще се покаже на екрана
System.out.println(5 * 2.0);
Номерът 10.0ще се покаже на екрана

И накрая, също е възможно да се присвоят реални числа на intпроменливи. Когато правим това, дробната част от реалното число се изхвърля — числото се закръгля надолу до най-близкото цяло число.

Освен това компилаторът изисква от програмиста изрично да documentира Howво се случва (за да е сигурен, че другите програмисти разбират, че дробната част се изпуска). Като цяло такова преобразуване изглежда така в codeа:

integer_variable = (int)(real_number);
Присвояване на реално число на intпроменлива

Примери:

Изявление Забележка
int x = (int)(5.5);
Променливите xмагазини5
double a = 5.999;
int x = (int)(a);
Променливите xмагазини5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
Променливите xмагазини11


4. Деление на цели и реални числа в Java

При деление на цяло число на цяло число остатъкът винаги се изхвърля. Как тогава можем да разделим 5на, 2за да получим 2.5?

Първоначално изглежда, че правилният вариант е:

double d = 5 / 2;

Но не е толкова просто. Проблемът тук е, че Java машината първо изчислява стойността на 5 / 2и едва след това присвоява резултата на dпроменливата. И 5 / 2операцията е целочислено деление. Това означава, d че ще съдържа 2or, по-точно,2.0

Правилното решение е да запишете поне едно от числата, участващи в делението, като реално число (т.е. с десетична запетая):

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

Във всеки от изразите d ще съдържа2.5

Но Howво ще стане, ако работим с променливи? Ами ако имаме code като този?:

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

Тук има хитро (и очевидно) решение — принудете Java машината да конвертира променливи в реални числа, като ги умножи по едно като реално число ( 1.0)

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

Имайте предвид, че умножението и делението имат еднакъв приоритет и се извършват отляво надясно. Това означава, че има meaning къде умножаваме 1,0.

Примери:

Изявление Ред за изпълнение Резултат
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