我需要使用 π 进行计算。当我检查M_PI的精度时,它只打印了7个十进制数字。所以我
#defined
我自己的MY_PI
。但我仍然面临着同样的问题。 double
应支持 15-17 位十进制数字。为什么我只得到6
#define MY_PI 3.1415926535897932384626433832795028841971
#include<stdio.h>
#include<math.h>
int main()
{
printf("%f\n%lf\n%20lf\n",M_PI,M_PI,M_PI);
printf("%d\n%d\n",sizeof(float),sizeof(double));
printf("%f\n%lf\n%20lf\n",MY_PI,MY_PI,MY_PI);
return 0;
}
执行代码会产生这样的结果,
3.141593
3.141593
3.141593
4
8
3.141593
3.141593
3.141593
Process returned 0 (0x0) execution time : 0.080 s
Press any key to continue.
C 不会将有关参数的类型信息传递给函数。
printf
从您传递的格式字符串中获取所有类型信息。
由于历史原因,
%f
和%lf
都告诉printf
期待double
争论。根据 C 2018 7.21.6.1 8,%f
指示 printf
:
表示浮点数的
参数将转换为格式为 [-]ddd.ddd 的十进制表示法,其中小数点字符后的位数等于精度规范。如果精度缺失,则取6;…double
因此,打印六位数字仅仅是因为这是默认值,而不是因为与类型有任何特别关系。要查看更多数字,请请求更多数字:
printf("%.60f\n", M_PI);
这通常会打印:
3.141592653589793115997963468544185161590576171875000000000000
那是因为你给出的 printf 的精度。当使用 %f 或 %lf 时,printf 函数始终只打印小数点后 6 位数字。你必须告诉它你想要的小数点后有多少位。看起来你尝试过这个,但方法不对。您必须在要查看的位数之前添加一个点。
示例:
printf("Test: %.20lf", MY_PI);