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

