【问题标题】:Confusing result while converting degree into radian in C在C中将度数转换为弧度时结果令人困惑
【发布时间】:2019-10-08 16:39:50
【问题描述】:
  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 是一个int。您不能随意将其设为double
  • 与其他语言(例如 python)不同,C 不会更改变量的类型以匹配值。相反,它会更改值的类型以匹配变量。由于x 被声明为int,分配给x 的任何值都将转换为int
  • 3.14?͏͏͏͏͏͏͏͏͏͏͏͏͏
  • 你没有使用pi。你正在使用3.14
  • @PratikSampat:除了M_PI 不是标准要求的,所以你的代码是不可移植的。哦,快乐!

标签: c double


【解决方案1】:

你的代码有两个问题:

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 的一个非常差的近似值,我相信你可以做得更好。

【讨论】:

  • 我的第二个代码是否正确?我应该改用 22/7 还是 3.1416?
猜你喜欢
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
相关资源
最近更新 更多