1. doublejenis

Java menyediakan doublejenis untuk bekerja dengan nombor nyata (pecahan). Ia menduduki 8 bytesdalam ingatan (dua kali lebih banyak daripada intjenis) dan boleh menyimpan nilai dalam julat dari hingga . Sebagai perbandingan: jenis boleh menyimpan nilai dalam julat dari hingga .-1.7*10308+1.7*10308int-2*109+2*109

Dalam nombor nyata, bahagian pecahan ditulis selepas titik perpuluhan. Contohnya, 123.456, atau 2.5, atau 100.00, atau 0.01. Apabila komputer berurusan dengan nombor sedemikian, kami memanggilnya nombor titik terapung .

By the way, sebagai tambahan kepada doublejenis, kami juga mempunyai floatjenis (yang hanya bersaiz 4 bait). Namanya berasal dari titik terapung . Dan nama itu doubleberasal dari pelampung berganda . A doubleadalah dua kali lebih besar daripada a float: 8 bytesberbanding 4. Ia juga dipanggil nombor titik terapung berketepatan ganda .


2. Mencipta doublejenis

Jenis berganda digunakan untuk menyimpan nombor nyata. Untuk mencipta pembolehubah dalam kod yang boleh menyimpan nombor nyata, anda perlu menggunakan pernyataan seperti ini:

double name;
Mencipta doublejenis

Di mana nama ialah nama pembolehubah. Contoh:

Kenyataan Penerangan
double price;
Pembolehubah sebenar pricedicipta
double weight;
Pembolehubah sebenar weightdicipta
double lightSpeed;
Pembolehubah sebenar lightSpeeddicipta

Seperti intjenis, anda boleh menggunakan trengkas untuk mencipta berbilang doublepembolehubah secara serentak:

double name 1, name 2, name 3;
Mencipta berbilang doublepembolehubah

Dan dengan serta-merta memberikan nilai kepada mereka:

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
Mencipta dan memulakan berbilang doublepembolehubah

Contoh:

Kenyataan Catatan
double price = 5.0;
Kedai berubah-ubah5.0
double weight = 2;
Kedai berubah-ubah2.0
double x = 1.0, y = 2.0, z = 3.0;

3. Menetapkan integer dan nombor nyata

Ia akan menjadi buruk jika integer boleh diberikan hanya kepada intpembolehubah, dan nombor nyata - hanya kepada doublepembolehubah. Kami mahu dapat menukar antara dua jenis nombor. Dan Java menyediakan keupayaan ini.

Pertama, kedua-dua nombor nyata dan integer boleh diberikan kepada doublepembolehubah. Apabila memberikan integer, ia hanya ditukar kepada nombor nyata. Sudah tentu, beberapa ketepatan mungkin hilang dalam proses itu.

Kenyataan Catatan
double price = 5.0;
Kedai berubah-ubah5.0
double weight = 2;
Kedai berubah-ubah2.0
int t = 1000;
double x =  t * t;

Kedai xberubah-ubah1000000.0

Kedua, jika integer dan nombor nyata terlibat dalam beberapa ungkapan, maka integer mula-mula ditukar kepada nombor nyata dan barulah operasi dengan nombor nyata yang lain dilakukan.

Kenyataan Catatan
int t = 1000;
double x = t * 5.0;

Kedai xberubah-ubah5000.0
System.out.println(5 * 2);
Nombor tersebut 10akan dipaparkan pada skrin
System.out.println(5 * 2.0);
Nombor tersebut 10.0akan dipaparkan pada skrin

Dan akhirnya, ia juga mungkin untuk menetapkan nombor nyata kepada intpembolehubah. Apabila kita melakukan ini, bahagian pecahan nombor nyata dibuang — nombor itu dibundarkan ke bawah kepada nombor bulat terdekat.

Selain itu, pengkompil memerlukan pengaturcara untuk mendokumentasikan perkara yang berlaku secara eksplisit (untuk memastikan pengaturcara lain memahami bahawa bahagian pecahan sedang digugurkan). Secara umum, penukaran sedemikian kelihatan seperti ini dalam kod:

integer_variable = (int)(real_number);
Menetapkan nombor nyata kepada intpembolehubah

Contoh:

Kenyataan Catatan
int x = (int)(5.5);
Kedai xberubah-ubah5
double a = 5.999;
int x = (int)(a);
Kedai xberubah-ubah5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
Kedai xberubah-ubah11


4. Membahagi integer dan nombor nyata dalam Java

Apabila membahagikan integer dengan integer, bakinya sentiasa dibuang. Jadi bagaimana kita boleh membahagi 5dengan 2untuk mendapatkan 2.5?

Pada mulanya, nampaknya pilihan yang betul ialah:

double d = 5 / 2;

Tetapi ia tidak begitu mudah. Masalahnya di sini ialah mesin Java mula-mula mengira nilai 5 / 2dan hanya kemudian memberikan hasilnya kepada dpembolehubah. Dan 5 / 2operasinya ialah pembahagian integer. Maksudnya d akan mengandungi 2atau, lebih tepat lagi,2.0

Penyelesaian yang betul ialah menulis sekurang-kurangnya satu daripada nombor yang terlibat dalam pembahagian sebagai nombor nyata (iaitu dengan titik perpuluhan):

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

Dalam setiap ungkapan, d akan mengandungi2.5

Tetapi bagaimana jika kita bekerja dengan pembolehubah? Bagaimana jika kita mempunyai kod seperti ini?:

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

Terdapat penyelesaian yang licin (dan jelas) di sini — memaksa mesin Java untuk menukar pembolehubah kepada nombor nyata dengan mendarabkannya dengan satu sebagai nombor nyata ( 1.0)

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

Ambil perhatian bahawa pendaraban dan pembahagian mempunyai keutamaan yang sama, dan dilakukan dari kiri ke kanan. Ini bermakna ia penting di mana kita mendarabkan 1.0.

Contoh:

Kenyataan Perintah pelaksanaan Hasilnya
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