1. Giới thiệu
Trong ngôn ngữ C, các ký tự định dạng (format specifier) được sử dụng để hiển thị và nhập giá trị số hoặc chuỗi ký tự. Đặc biệt, khi làm việc với số thực dấu phẩy động, việc hiểu rõ sự khác nhau giữa các ký tự như “%f” và “%lf” là rất quan trọng để lập trình chính xác. Bài viết này sẽ tập trung vào cách sử dụng “%lf” dành cho kiểu số thực dấu phẩy động độ chính xác kép (double
), đồng thời giải thích cách dùng với hàm printf
, scanf
và sự khác biệt so với các ký tự định dạng khác.
2. Ký tự định dạng là gì
Ký tự định dạng là ký hiệu dùng để chỉ định cách hiển thị hoặc nhập dữ liệu trong ngôn ngữ C. Sử dụng đúng ký tự định dạng cho từng kiểu dữ liệu giúp đảm bảo việc nhập/xuất dữ liệu chính xác. Trước hết, hãy cùng xem các ký tự định dạng tiêu biểu và kiểu dữ liệu tương ứng.
Các ký tự định dạng chính và kiểu dữ liệu tương ứng
Ký tự định dạng | Kiểu dữ liệu tương ứng |
---|---|
%d | int (số nguyên) |
%f | float (số thực dấu phẩy động đơn) |
%lf | double (số thực dấu phẩy động kép) |
%Lf | long double (số thực dấu phẩy động kép mở rộng) |
3. Sử dụng “%lf” trong hàm printf
Hàm printf
trong C được dùng để hiển thị dữ liệu theo định dạng chỉ định. Khi in giá trị kiểu double
, bạn có thể sử dụng cả “%f” và “%lf”, nhưng mỗi cách có sự khác biệt nhỏ.
Sự khác nhau giữa “%lf” và “%f” trong printf
Trong printf
, cả %f
và %lf
đều có thể dùng để in giá trị kiểu double
. Lý do là vì khi truyền tham số số thực vào printf
, chúng sẽ được tự động chuyển thành double
. Do đó, cách thông dụng vẫn là dùng “%f” khi in kiểu double
.
Ví dụ sử dụng
#include <stdio.h>
int main() {
double num = 3.14159;
printf("%f\n", num); // Kết quả: 3.141590
printf("%lf\n", num); // Kết quả: 3.141590
return 0;
}
Như ví dụ trên, cả hai ký tự định dạng đều cho cùng kết quả, nhưng dùng %f
với printf
là chuẩn thông dụng.
4. Sử dụng “%lf” trong hàm scanf
Hàm scanf
dùng để đọc dữ liệu nhập vào và lưu vào biến. Với scanf
, bạn cần khớp đúng ký tự định dạng với kiểu dữ liệu của biến. Đây là nơi sự phân biệt giữa “%f” và “%lf” trở nên quan trọng.
Sự khác nhau giữa “%lf” và “%f” trong scanf
- “%f”: dùng khi lưu dữ liệu vào biến kiểu
float
. - “%lf”: dùng khi lưu dữ liệu vào biến kiểu
double
. Nếu biến làdouble
thì bắt buộc phải dùng%lf
.
Ví dụ sử dụng
#include <stdio.h>
int main() {
double num;
printf("Nhập một số: ");
scanf("%lf", &num); // Lưu vào biến double
printf("Giá trị đã nhập: %f\n", num);
return 0;
}
Khi nhập giá trị kiểu double
với scanf
, phải dùng “%lf”. Nếu dùng “%f” sẽ gây ra hành vi không mong muốn.
5. Lưu ý khi dùng “%lf”
Khi sử dụng “%lf”, đặc biệt trong scanf
, cần đảm bảo ký tự định dạng và kiểu dữ liệu khớp nhau. Nếu không khớp, có thể gây lỗi hoặc kết quả sai.
Lỗi thường gặp và cách đúng
Ví dụ sai
Đoạn code dưới đây dùng “%lf” cho biến float
nên không đảm bảo kết quả đúng.
#include <stdio.h>
int main() {
float num;
printf("Nhập một số: ");
scanf("%lf", &num); // Sai ký tự định dạng
return 0;
}
Ví dụ đúng
Dưới đây là cách dùng đúng “%lf” với biến double
:
#include <stdio.h>
int main() {
double num;
printf("Nhập một số: ");
scanf("%lf", &num); // Đúng ký tự định dạng
return 0;
}
Khi nhập dữ liệu với scanf
, hãy luôn khớp kiểu dữ liệu và ký tự định dạng.

6. Khác biệt với các ký tự định dạng khác
Ngoài “%lf”, bạn cũng nên biết các ký tự định dạng khác để chọn đúng theo nhu cầu.
Các ký tự định dạng và mục đích
%f
: dùng chofloat
(trongprintf
có thể dùng chodouble
)%Lf
: dùng cholong double
%e
/%E
: xuất theo dạng khoa học (scientific notation)
Ví dụ và giải thích
#include <stdio.h>
int main() {
long double num_long_double = 3.14159265358979323846L;
printf("Xuất kiểu long double: %Lf\n", num_long_double); // long double
printf("Xuất dạng khoa học: %e\n", num_long_double); // scientific notation
return 0;
}
Sử dụng đúng ký tự định dạng giúp đảm bảo kết quả hiển thị chính xác.
7. Kết luận
Bài viết đã giải thích về ký tự định dạng “%lf” trong C. Hãy ghi nhớ các điểm chính sau để giảm lỗi khi lập trình:
printf
: có thể dùng “%f” hoặc “%lf” chodouble
, nhưng “%f” phổ biến hơn.scanf
: dùng “%lf” chodouble
, “%f” chofloat
. Luôn khớp kiểu dữ liệu và ký tự định dạng.- Lưu ý: Nếu ký tự định dạng không đúng, đặc biệt trong
scanf
, có thể gây kết quả sai hoặc lỗi.