Trong hướng dẫn này, chúng ta sẽ tìm hiểu về kiểu dữ liệu float và double với sự trợ giúp của các ví dụ. Chúng ta cũng sẽ xem xét một số điểm khác biệt chính giữa chúng và thời điểm sử dụng chúng.
Trong C ++, cả hai float
và double
kiểu dữ liệu được sử dụng cho các giá trị dấu phẩy động. Số dấu phẩy động được sử dụng cho các giá trị thập phân và hàm mũ . Ví dụ,
// creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5
Chúng ta phải thêm hậu tố f
hoặc F
vào cuối float
giá trị. Điều này là do trình biên dịch diễn giải các giá trị thập phân mà không có hậu tố là double
.
Hãy xem xét mã này.
float a = 5.6;
Ở đây, chúng tôi đã gán một double
giá trị cho một float
biến.
Trong trường hợp này, 5.6 được float
trình biên dịch tự động chuyển đổi thành trước khi nó được gán cho biến a. Điều này có thể dẫn đến mất dữ liệu. Để tìm hiểu thêm, hãy truy cập Chuyển đổi loại C ++.
Sự khác biệt giữa float và double
Phao nổi | gấp đôi |
---|---|
Kích thước: 4 byte | Kích thước: 8 byte |
Độ chính xác: Nói chung, độ chính xác 7 chữ số thập phân | Độ chính xác: Nói chung, độ chính xác 15 chữ số thập phân |
Ví dụ: 3.56f , 3e5f , vv | Ví dụ: 3.56 , 3e5 , vv |
Lưu ý: Trừ khi bạn có yêu cầu cụ thể, hãy luôn sử dụng double
thay vì float
, vì float
các biến có thể dễ mắc lỗi khi làm việc với số lượng lớn.
Ví dụ 1: C ++ float và double
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Đầu ra
Số loại đôi = 3,91235 Số loại phao = 3,91235
Lưu ý: Trình biên dịch được sử dụng cho ví dụ này (trình biên dịch MinGW) được phép cho 6 chữ số. Vì vậy, các giá trị biến của chúng tôi đã được làm tròn và cắt bớt thành 6 chữ số bởi trình biên dịch.
setpre precision () để Chỉ định Điểm thập phân
Chúng ta có thể chỉ định số lượng dấu thập phân cần in cout
bằng cách sử dụng setprecision()
hàm.
Hàm này được định nghĩa trong iomanip
tệp tiêu đề, là viết tắt của thao tác nhập / xuất .
Ví dụ 2: Sử dụng setpre precision () Đối với Số Dấu phẩy động
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Đầu ra
Số loại đôi = 3,912348239293 Số loại phao = 3,912348270416
Như chúng ta có thể thấy từ ví dụ trên, chúng tôi đã chỉ định độ chính xác lên đến 13 chữ số.
cout << setprecision(13);
Giá trị dấu phẩy động mà chúng tôi đã gán cho các biến của mình cũng bao gồm 13 chữ số.
Tuy nhiên, vì float
có độ chính xác chỉ lên đến 7 chữ số, nó hiển thị các giá trị rác sau khi vượt quá độ chính xác của nó.
double
Biến của chúng tôi hiển thị số chính xác vì nó có độ chính xác là 15 chữ số, trong khi bản thân số đó bao gồm 13 chữ số.
Để thay thế, chúng ta có thể chỉ định các vùng khác nhau cho các biến khác nhau trong khi in chúng.
Ví dụ 3: Các dự đoán khác nhau cho các biến khác nhau
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0; )
Đầu ra
Số loại đôi = 3,9123482393 Số loại phao = 3,912348
Từ chương trình trên, chúng ta có thể thấy rằng chúng ta đã đặt hai giá trị chính xác khác nhau cho float
và double
.
Trong cả hai trường hợp, độ chính xác đều nhỏ hơn các chữ số thực của số. Vì vậy, chữ số cuối cùng được làm tròn và phần còn lại bị cắt bớt.
Lưu ý: Nếu chúng ta chỉ định độ chính xác lớn hơn độ chính xác của chính kiểu dữ liệu (7 cho float
và 15 cho double
), thì trình biên dịch sẽ cung cấp cho chúng ta các giá trị rác sau khi vượt quá giới hạn chính xác, như có thể thấy với float
đầu ra trong ví dụ 2 .
Làm việc với Số mũ
Như đã đề cập ở trên, float
và double
cũng có thể được sử dụng để biểu diễn số mũ . Ví dụ,
// ex = 325 X (10 25) double ex = 325E25;
C ++ xuất ra các số theo cấp số nhân và các số rất lớn trong một định dạng được gọi là định dạng khoa học . Biến ex sẽ được xuất theo định dạng này theo mặc định vì nó là một số rất lớn.
Để buộc C ++ hiển thị các số dấu phẩy động của chúng tôi ở scientific
định dạng bất kể kích thước của số, chúng tôi sử dụng định dạng định dạng scientific
bên trong cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Ngoài ra, còn có một định dạng định dạng khác được gọi là fixed
, hiển thị số dấu phẩy động ở định dạng thập phân.
Nó tương tự như hiển thị số dấu phẩy động bằng cách chỉ sử dụng cout
mà không setprecision()
, ngoại trừ thực tế là fixed
hiển thị số lên đến 6 dấu thập phân.
Mặt khác, chỉ sử dụng cout
hiển thị các chữ số theo trình biên dịch cụ thể (tổng số 6 chữ số trong trường hợp trình biên dịch MinGW , bao gồm các chữ số trước dấu thập phân).
Ví dụ 4: Định dạng cố định và khoa học
#include #include using namespace std; int main() ( // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "Displaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0; )
Đầu ra
Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float Type Number 2 = 3.250000e+004
long double
Apart from float
and double
, there is another data type that can store floating-point numbers. This is known as long double
.
It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double
, though most of the time, it is greater than that of double
.
long double
values should end with L
. For example,
// declaring a long double variable long double num_ldb = 2.569L;
Lưu ý: Các kiểu dữ liệu dấu phẩy động được C ++ hỗ trợ là float
, double
và long double
. Không có long float
.