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 printf
s?
#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
để float
xả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?
C
chúng tôi đã sử dụng printf("%f",x)
cho một float
và 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)
??
%lf
trong 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 double
bởi trình biên dịch, giống như short
được chuyển đổi thành một int
.
4.4e10
là mộtdouble
hằng số được chuyển đổi thànhfloat
trong quá trình khởi tạoc
nhưng được giữ nguyêndouble
khi được chuyển đếnprintf
. Tuy nhiên, bạn cũng có thể muốn biết rằng việc thêm mộtf
hậu tố làm cho nófloat
không đổi: In ấn4.4e10f
sẽ hiển thị cùng một giá trị mà kết quả từ việc khởi tạoc
thành4.4e10f
. Phân biệt cácfloat
hằng số với cácdouble
hằ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.