0Pricing
C Academy · 课时

整数与浮点数转换

精度问题

整数与浮点数转换 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 隐式转换
  2. 显式类型转换
  3. 整数与浮点数转换
  4. 转换陷阱
← 返回 C Academy