在C中将度数转换为弧度时的结果令人困惑

时间:2019-05-22 08:37:36

标签: c double

  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位数字。

1 个答案:

答案 0 :(得分:5)

您的代码中有两个问题:

x = (double)((x*3.14)/180);

(x*3.14)/180已经是double,因此此行等效于:

x = (x*3.14)/180;

但无论如何,x的类型仍为int,因此,如果x例如300,则x的新值将为{{1} },将其截断为300 * 3.14/180 = 5.2333

第二个问题在这里:

5

如前所述,printf("%.6lf",x); 的类型为x,但是int格式说明符需要"%.6lf"。如果变量类型与格式说明符不匹配,则行为是不确定的。

您的代码的第二个版本是完全正确的,但是请注意,用户只能输入整数值。

顺便说一句:3.14是PI的非常差的近似值,我相信您可以做得更好。