C 类型转换
类型转换
有时,您需要将一种数据类型的的值转换为另一种类型。这称为**类型转换**。
例如,如果您尝试将两个整数 5
除以 2
,您会期望结果为 2.5
。但由于我们使用的是整数(而不是浮点值),以下示例将只输出 2
要获得正确的结果,您需要了解**类型转换**的工作原理。
C 中有两种类型的转换
- **隐式转换**(自动)
- **显式转换**(手动)
隐式转换
当您将一种类型的赋值给另一种类型时,隐式转换由编译器自动完成。
例如,如果您将一个 int
值赋值给一个 float
类型
如您所见,编译器会自动将 int 值 9
转换为 float 值 9.000000
。
这可能存在风险,因为在某些情况下您可能会失去对特定值的控制。
特别是如果反过来 - 以下示例会自动将 float 值 9.99
转换为 int 值 9
.99
发生了什么?我们可能希望在程序中保留这些数据!所以要小心。了解编译器在这些情况下的工作原理非常重要,以避免出现意外结果。
作为另一个示例,如果您将两个整数相除:5
除以 2
,您知道总和是 2.5
。正如您在页面开头所知,如果您将总和存储为整数,结果将只显示数字 2
。因此,最好将总和存储为 float
或 double
,对吧?
为什么结果是 2.00000
而不是 2.5
?因为 5 和 2 在除法中仍然是整数。在这种情况下,您需要手动将整数值转换为浮点值。(见下文)。
显式转换
显式转换是通过在值前面放置括号 ()
中的类型来手动完成的。
考虑到我们上面示例中的问题,我们现在可以得到正确的结果
您也可以在变量前面放置类型
由于您在上一章中学习了“小数精度”,因此您可以通过删除多余的零(如果您愿意)来使输出更清晰
真实示例
以下是一个使用数据类型和类型转换的真实示例,我们创建一个程序来计算用户分数相对于游戏中最高分数的百分比
示例
// 将游戏中可能的最高分数设置为 500
int maxScore = 500;
// 用户的实际分数
int userScore = 423;
/* 计算用户分数相对于最高可获得分数的百分比。
将 userScore 转换为 float 以确保除法准确 */
float percentage = (float) userScore / maxScore * 100.0;
// 打印百分比
printf("用户的百分比是 %.2f", percentage);
尝试一下 »