首页 > 解决方案 > 在C中将度数转换为弧度时结果令人困惑

问题描述

  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 位的输出。

标签: cdouble

解决方案


您的代码中有两个问题:

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

(x*3.14)/180已经是 adouble因此这一行相当于:

x = (x*3.14)/180;

但无论如何,x保留的类型int,所以如果x是,例如300,新的值x300 * 3.14/180 = 5.2333被截断为5

第二个问题在这里:

printf("%.6lf",x);

如前所述,类型xint,但"%.6lf"格式说明符需要double. 如果变量类型与格式说明符不匹配,则行为未定义。

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

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


推荐阅读