Ani*_*Sen 3 c double printf floating conversion-specifier
在 w3resource.com 上的一篇文章中,我看到了以下代码:
double x, y;
pr1 = sqrt(pr1);
x = (-b + pr1)/(2*a);
y = (-b - pr1)/(2*a);
printf("Root1 = %.5lf\n", x);
printf("Root1 = %.5lf\n", y);
Run Code Online (Sandbox Code Playgroud)
文章说取三个浮点数。但在他们的解决方案(此代码片段)中,他们使用了%lf格式说明符。他们为什么使用%lf而不是%f?我也可以使用%f代替%lf浮点数吗?
如果我使用float关键字代替double, 并使用%f, 有什么问题吗?输出对我来说是一样的。
%fprintf在家庭功能中具有不同的含义scanf:
printf、%f和%lf是等价的,并且两者都由 匹配double。这是因为在可变参数函数中,所有float参数都会在调用函数时提升,因此在语言级别传递和double传递之间没有区别。floatdoublescanf,%f匹配 afloat*和%lf匹配 a double*,这个区别非常重要。使用错误类型的指针将导致未定义的行为。还可以使用cdecl+来更好的理解printf和scanf调用。输出如下:
Run Code Online (Sandbox Code Playgroud)printf("Root1 = %.5lf\n", x)Run Code Online (Sandbox Code Playgroud)Write "Root1 = " Write a decimal double with lower-case infinity/NaN symbols precision: 5 Write "\n" ARGUMENTS & EXPECTED TYPES -------------------------- x (double)
如有疑问,请使用%fforfloat和%lffor double,即使在 中printf,两者之间没有区别。scanf否则,您将在您的字符串和格式字符串之间引入毫无意义的不一致printf。
float您可能对和浮点数的含义感到困惑。
float、double、long double、 more 是C 语言中的浮点数。当文章中提到浮点数时,它们也可能表示double、_Decimal32、_Float128等。
scanf提升float*为double*类似printf?这是不可能的,因为我们存储的对象float不能用于存储double.
doublea中,这是不可能的。float| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |