1. doubleloại

Java cung cấp doublekiểu để làm việc với số thực (phân số). Nó chiếm 8 bytestrong bộ nhớ (gấp đôi so với intloại) và có thể lưu trữ các giá trị trong phạm vi từ đến . Để so sánh: loại có thể lưu trữ một giá trị trong phạm vi từ đến .-1.7*10308+1.7*10308int-2*109+2*109

Trong số thực, phần phân số được viết sau dấu thập phân. Ví dụ: 123,456 hoặc 2,5 hoặc 100,00 hoặc 0,01. Khi máy tính xử lý các số như vậy, chúng tôi gọi chúng là số dấu phẩy động .

Nhân tiện, ngoài doubleloại, chúng tôi cũng có floatloại (chỉ có kích thước 4 byte). Tên của nó xuất phát từ dấu phẩy động . Và tên doubleđến từ double float . A doublelớn gấp đôi a float: 8 bytesso với 4. Nó còn được gọi là số dấu phẩy động có độ chính xác kép .


2. Tạo doublekiểu

Kiểu double dùng để lưu số thực. Để tạo một biến trong mã có thể lưu số thực, bạn cần sử dụng một câu lệnh như sau:

double name;
Tạo một doubleloại

Trong đó tên là tên của biến. Ví dụ:

Tuyên bố Sự miêu tả
double price;
Một biến thực priceđược tạo ra
double weight;
Một biến thực weightđược tạo ra
double lightSpeed;
Một biến thực lightSpeedđược tạo ra

Đối với intloại, bạn có thể sử dụng tốc ký để tạo doubleđồng thời nhiều biến:

double name 1, name 2, name 3;
Tạo nhiều doublebiến

Và thậm chí ngay lập tức gán giá trị cho chúng:

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
Tạo và khởi tạo nhiều doublebiến

Ví dụ:

Tuyên bố Ghi chú
double price = 5.0;
Các cửa hàng biến5.0
double weight = 2;
Các cửa hàng biến2.0
double x = 1.0, y = 2.0, z = 3.0;

3. Gán số nguyên và số thực

Sẽ thật tệ nếu các số nguyên chỉ có thể được gán cho intcác biến và các số thực - chỉ cho doublecác biến. Chúng tôi muốn có thể chuyển đổi giữa hai loại số. Và Java cung cấp khả năng này.

Đầu tiên, cả số thực và số nguyên đều có thể được gán cho doublecác biến. Khi gán số nguyên, chúng chỉ đơn giản được chuyển đổi thành số thực. Tất nhiên, một số độ chính xác có thể bị mất trong quá trình này.

Tuyên bố Ghi chú
double price = 5.0;
Các cửa hàng biến5.0
double weight = 2;
Các cửa hàng biến2.0
int t = 1000;
double x =  t * t;

Các xcửa hàng biến1000000.0

Thứ hai, nếu một số nguyên và một số thực có liên quan đến một biểu thức nào đó, thì trước tiên số nguyên đó được chuyển đổi thành một số thực và chỉ sau đó phép toán với số thực kia mới được thực hiện.

Tuyên bố Ghi chú
int t = 1000;
double x = t * 5.0;

Các xcửa hàng biến5000.0
System.out.println(5 * 2);
Số 10sẽ được hiển thị trên màn hình
System.out.println(5 * 2.0);
Số 10.0sẽ được hiển thị trên màn hình

Và cuối cùng, cũng có thể gán số thực cho intbiến. Khi chúng ta làm điều này, phần phân số của số thực sẽ bị loại bỏ — số được làm tròn xuống thành số nguyên gần nhất.

Ngoài ra, trình biên dịch yêu cầu lập trình viên ghi lại rõ ràng những gì đang xảy ra (để đảm bảo rằng các lập trình viên khác hiểu rằng phần phân số đang bị loại bỏ). Nói chung, một chuyển đổi như vậy trông như thế này trong mã:

integer_variable = (int)(real_number);
Gán một số thực cho một intbiến

Ví dụ:

Tuyên bố Ghi chú
int x = (int)(5.5);
Các xcửa hàng biến5
double a = 5.999;
int x = (int)(a);
Các xcửa hàng biến5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
Các xcửa hàng biến11


4. Chia số nguyên và số thực trong Java

Khi chia một số nguyên cho một số nguyên, phần dư luôn bị loại bỏ. Làm thế nào sau đó chúng ta có thể chia 5cho 2để nhận được 2.5?

Lúc đầu, có vẻ như tùy chọn đúng là:

double d = 5 / 2;

Nhưng nó không đơn giản như vậy. Vấn đề ở đây là máy Java trước tiên tính toán giá trị của 5 / 2và chỉ sau đó mới gán kết quả cho dbiến. Và 5 / 2phép toán là phép chia số nguyên. Điều đó có nghĩa là d sẽ chứa 2hoặc, chính xác hơn,2.0

Giải pháp đúng là viết ít nhất một trong các số liên quan đến phép chia dưới dạng số thực (nghĩa là có dấu thập phân):

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

Trong mỗi biểu thức, d sẽ chứa2.5

Nhưng nếu chúng ta đang làm việc với các biến thì sao? Nếu chúng ta có mã như thế này thì sao?:

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

Có một giải pháp khéo léo (và rõ ràng) ở đây — buộc máy Java chuyển đổi các biến thành số thực bằng cách nhân chúng với một dưới dạng số thực ( 1.0)

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

Lưu ý rằng phép nhân và phép chia có mức độ ưu tiên như nhau và được thực hiện từ trái sang phải. Điều đó có nghĩa là vấn đề là chúng ta nhân 1,0 ở đâu.

Ví dụ:

Tuyên bố Trình tự thực hiện Kết quả
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