在 C 中将度数转换为弧度时的混淆结果

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

最佳答案

你的代码有两个问题:

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/

相关文章:

c# - 将 double 转换为 decimal 还是从 double 构造 "new"decimal 更好?

C 中乘法后计算器崩溃

c - 在c中查找加法执行时间的程序

c - 使用 mmap 分配双二维数组

java - 在 Java 中合并 double 类型数组

C语言 : scanf function producing different results with float and double types?

c - 我怎样才能导致这个程序出现段错误? (帮助我找到一个缓冲区溢出漏洞)

c - 使用 sscanf 将元素添加到每个索引的 int 数组中

c - C 中未初始化指针的值

java - 如何从 double 中删除 ".0"?安卓工作室