c - 在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 位的输出。
解决方案
您的代码中有两个问题:
x = (double)((x*3.14)/180);
(x*3.14)/180
已经是 adouble
因此这一行相当于:
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 的一个非常差的近似值,我相信你可以做得更好。
推荐阅读
- javascript - 防止客户端控制数据到服务器
- java - boolean 方法的行为与预期不符,并在预期为 true 时返回 false
- r - 加快多分位数的 Tidyverse 计算
- r - 如何将具有多个层的 .nc 文件转换为在 R 中的 ENVI 中可读的文件
- ios - 更新表格视图中的单元格
- java - System.FormatException: '输入字符串的格式不正确。' 视觉工作室
- python - Django XSS - 它可以发生在服务器端(views.py)吗?
- javascript - 在javascript中向对象添加新属性不能正常工作?
- ruby - 如何在 Docker 中将 Ruby irb 与 Alpine Linux 映像一起使用?
- python - 我通过终端导入了 pygame,但是 python shell 说它不知道一个名为 pygame 的模块。我用mac