整数与浮点数转换
精度问题
整数与浮点数转换 是 CoddyKit 上的免费 C Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C Academy 课程共包含 4 节课。
数字的两个世界
C 语言中有整数(精确且没有小数)和浮点数(近似且带有小数)。在两者之间转换会改变值的存储方式。
#include <stdio.h>
int main(void) {
int i = 10;
double d = 10.5;
printf("%d %.1f\n", i, d);
return 0;
}将 int 扩宽为 double
大多数 int 值都能在 double 中精确表示,因此扩宽是安全的。
#include <stdio.h>
int main(void) {
int n = 1000;
double d = n;
printf("d = %.1f\n", d);
return 0;
}将 double 窄化为 int
从 double 转为 int 会向零截断,并可能丢失信息。
#include <stdio.h>
int main(void) {
double d = 12.75;
int n = (int)d;
printf("n = %d\n", n);
return 0;
}负数截断
向零截断意味着 -2.9 会变成 -2,而不是 -3。
#include <stdio.h>
int main(void) {
double d = -2.9;
int n = (int)d;
printf("n = %d\n", n);
return 0;
}float 与 double 的精度
float 可保存约 7 位有效数字,double 约可保存 15 位。将 double 转换为 float 会损失精度。
#include <stdio.h>
int main(void) {
double d = 3.14159265358979;
float f = (float)d;
printf("%.5f\n", f);
return 0;
}大型 int 转 float
非常大的 int 可能无法在 float 中精确表示,从而产生经过舍入的结果。
#include <stdio.h>
int main(void) {
int big = 16777217;
float f = (float)big;
printf("%.1f\n", f);
return 0;
}四舍五入与截断
强制类型转换会进行截断。要进行四舍五入,请先加上 0.5(针对正值),或使用库函数。
#include <stdio.h>
int main(void) {
double d = 4.6;
int truncated = (int)d;
int rounded = (int)(d + 0.5);
printf("%d %d\n", truncated, rounded);
return 0;
}平均值计算
计算整数的平均值时需要使用浮点除法,才能保留小数部分。
#include <stdio.h>
int main(void) {
int sum = 7, count = 2;
double avg = (double)sum / count;
printf("avg = %.2f\n", avg);
return 0;
}浮点数相等性陷阱
由于浮点数是近似值,使用 == 比较它们存在风险。请在一个较小的容差范围内进行比较。
#include <stdio.h>
#include <math.h>
int main(void) {
double a = 0.1 + 0.2;
if (fabs(a - 0.3) < 1e-9)
printf("close enough\n");
return 0;
}条件中的混合类型
将 int 与 double 比较时,int 会提升,因此比较会以浮点方式进行。
#include <stdio.h>
int main(void) {
int n = 3;
double d = 3.5;
if (n < d)
printf("3 < 3.5\n");
return 0;
}选择正确的类型
计数和索引使用整数;测量值和比率使用浮点数。
#include <stdio.h>
int main(void) {
int items = 4;
double pricePer = 2.5;
printf("total = %.2f\n", items * pricePer);
return 0;
}快速检查
测试您对整数和浮点数转换的理解。
回顾:整数与浮点数转换
您已学会数字在不同类型之间如何变化。
- int 转 double 通常会安全地扩宽
- double 转 int 会向零截断
- float 能保留的数字少于 double
- 通过加上 0.5 或调用库函数进行四舍五入
- 避免对浮点数使用
==;请使用容差
常见问题解答
「整数与浮点数转换」课时是免费的吗?
是的 — 「整数与浮点数转换」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C Academy 课程的其余内容,请升级到 CoddyKit PRO。 C Academy 课程共包含 4 节课。
「整数与浮点数转换」这节课中我会学到什么?
精度问题 你通过在浏览器中直接运行的动手代码来练习 C Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「整数与浮点数转换」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C Academy 课中编写并运行代码吗?
能。每节 C Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。