int x;
scanf("%d",&x);
x=(double)((x*3.14)/180);
printf("%.6lf",x);
当我运行上面的代码并输入 x=60 时,我得到 -0.000000。
int x;
double a;
scanf("%d",&x);
a=(x*3.14)/180;
printf("%.6lf",a);
但是当我运行上面的代码时,我得到了正确的答案。
我想知道我哪里做错了。我的类型转换或使用 double 或任何其他东西有问题吗?任何帮助将不胜感激。谢谢!
注意: 我需要打印小数点后最多 6 位的输出。
最佳答案
你的代码有两个问题:
x = (double)((x*3.14)/180);
(x*3.14)/180
已经是一个 double
因此这一行等同于:
x = (x*3.14)/180;
但无论如何 x
的类型仍然是 int
,所以如果 x
是例如 300
,新值x
将是 300 * 3.14/180 = 5.2333
,它将被截断为 5
。
第二个问题在这里:
printf("%.6lf",x);
如前所述,x
的类型是int
,但是"%.6lf"
格式说明符需要一个double
。如果变量类型与格式说明符不匹配,则行为未定义。
您的代码的第二个版本完全正确,但请注意,用户只能输入整数值。
顺便说一句:3.14 是一个非常差的 PI 近似值,我相信你可以做得更好。
关于在 C 中将度数转换为弧度时的混淆结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56252624/