最适合网络开发者的网站
C 语言。W3Schools 英文版。初学者课程

尿素 西斯

C 类型转换


类型转换

有时,你必须将一种数据类型的值转换为另一种类型。这称为 类型转换.

例如,如果你尝试除以两个整数, 5 经过2,你期望的结果是 2.5。但由于我们处理的是整数(而不是浮点值),因此以下示例将仅输出 2:

例子

int x = 5;
int y = 2;
int 总和 = 5 / 2;

printf("%d", sum); //输出 2
亲自尝试 »

为了获得正确的结果,你需要知道如何 类型转换 作品。

C 语言中有两种类型的转换:

  • 隐式转换 (自动地)
  • 显式转换 (手动)

隐式转换

当您将一种类型的值分配给另一种类型的值时,编译器会自动完成隐式转换。

例如,如果你分配一个 int 价值float 类型:

例子

// 自动转换:int 到 float
浮点数myFloat = 9;

printf("%f", myFloat); // 9.000000
亲自尝试 »

如你所见,编译器会自动将 int 值转换为 9 浮点值9.000000.

这可能有风险,因为在某些情况下您可能会失去对特定值的控制。

尤其是如果是相反的情况——下面的例子会自动将浮点值转换为 9.99 为 int 值9:

例子

// 自动转换:float 到 int
int 我的Int = 9.99;

printf("%d", myInt); // 9
亲自尝试 »

发生了什么事 .99?我们可能希望在程序中使用这些数据!所以要小心。了解编译器在这些情况下的工作方式很重要,以避免出现意外结果。

再举一个例子,如果你除以两个整数: 5 经过2,你知道总数是 2.5。正如您从本页开头所了解的,如果将总和存储为整数,则结果将仅显示数字 2。因此,最好将总和存储为 floatdouble, 正确的?

例子

浮点数和 = 5 / 2;

printf("%f", 总和); // 2.000000
亲自尝试 »

为什么结果 2.00000 并不是2.5?嗯,这是因为 5 和 2 在除法中仍然是整数。在这种情况下,您需要手动将整数值转换为浮点值。(见下文)。


显式转换

通过将类型放在括号中来手动进行显式转换 () 在值的前面。

考虑上面例子中的问题,我们现在可以得到正确的结果:

例子

// 手动转换:int 到 float
浮点数和 = (浮点数)5/2;

printf("%f", 总和); // 2.500000
亲自尝试 »

您还可以将类型放在变量前面:

例子

int 数值1 = 5;
int num2 = 2;
浮点数和 = (浮点数)num1 / num2;

printf("%f", 总和); // 2.500000
亲自尝试 »

而且由于您在上一章中学习了“十进制精度”,您可以通过删除多余的零(如果您愿意)使输出更加干净:

例子

int 数值1 = 5;
int num2 = 2;
浮点数和 = (浮点数)num1 / num2;

printf("%.1f", 总和); // 2.5
亲自尝试 »

现实生活中的例子

这是一个真实的例子,我们创建一个程序来计算用户得分占游戏最高得分的百分比:

例子

// 将游戏中可能获得的最高分数设置为 500
int 最大分数 = 500;

// 用户的实际得分
int 用户分数 = 420;

/* 计算用户分数占最高可用分数的百分比。
将 userScore 转换为浮点数,以确保除法准确 */
浮点百分比 = (浮点)用户分数/最大分数 * 100.0;

// 打印百分比
printf("用户的百分比为 %.2f", percentage);
亲自尝试 »