Trong chương trình đã cho, tại sao tôi lại nhận được kết quả khác nhau cho mỗi printfs?
#include <stdio.h>
int main()
{
float c = 4.4e10;
printf("%f\n", c);
printf("%f\n", 4.4e10);
return 0;
}
Và nó hiển thị đầu ra sau:
44000002048.000000
44000000000.000000
doubleđể floatxảy ra bằng ngôn ngữ C? Hoặc bạn có muốn biết những giá trị nào dẫn đến từ chuyển đổi, nghĩa là, những chuyển đổi có ảnh hưởng gì không? Hay cái gì khác?
Cchúng tôi đã sử dụng printf("%f",x)cho một floatvà printf("%lf",x)cho một double. Khi nào mọi thứ thay đổi? Và làm thế nào một người rõ ràng printf a (đơn) float- printf("%hf",x)??
%lftrong printf cũng giống như vậy %f. Một floatđối số trong biến được chuyển đổi thành một doublebởi trình biên dịch, giống như shortđược chuyển đổi thành một int.
4.4e10là mộtdoublehằng số được chuyển đổi thànhfloattrong quá trình khởi tạocnhưng được giữ nguyêndoublekhi được chuyển đếnprintf. Tuy nhiên, bạn cũng có thể muốn biết rằng việc thêm mộtfhậu tố làm cho nófloatkhông đổi: In ấn4.4e10fsẽ hiển thị cùng một giá trị mà kết quả từ việc khởi tạocthành4.4e10f. Phân biệt cácfloathằng số với cácdoublehằng số có thể rất quan trọng để thực hiện công việc chất lượng với số học dấu phẩy động.