菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP How to W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C 类型转换


类型转换

有时,您需要将一种数据类型的值转换为另一种类型。这被称为类型转换

例如,如果您尝试将两个整数 5 除以 2,您会期望结果是 2.5。但因为我们处理的是整数(而不是浮点数),下面的示例只会输出 2

示例

int x = 5;
int y = 2;
int sum = 5 / 2;

printf("%d", sum); // 输出 2
自己动手试一试 »

要获得正确的结果,您需要了解类型转换的工作原理。

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

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

隐式转换

当您将一种类型的值赋给另一种类型时,编译器会自动执行隐式转换。

例如,如果您将 int 值赋给 float 类型:

示例

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

printf("%f", myFloat); // 9.000000
自己动手试一试 »

如您所见,编译器自动将整数值 9 转换为浮点数值 9.000000

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

特别是反过来,下面的示例会自动将浮点数值 9.99 转换为整数值 9

示例

// 自动转换:float 到 int
int myInt = 9.99;

printf("%d", myInt); // 9
自己动手试一试 »

.99 去了哪里?我们可能希望在程序中使用这些数据!所以要小心。了解编译器在这些情况下如何工作很重要,以避免意外结果。

再举个例子,如果您将两个整数相除:5 除以 2,您知道总和是 2.5。正如您在本页开头所知,如果将总和存储为整数,结果只会显示数字 2。因此,将总和存储为 floatdouble 会更好,对吧?

示例

float sum = 5 / 2;

printf("%f", sum); // 2.000000
自己动手试一试 »

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


显式转换

显式转换是手动完成的,方法是将类型放在值前面的括号 () 中。

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

示例

// 手动转换:int 到 float
float sum = (float) 5 / 2;

printf("%f", sum); // 2.500000
自己动手试一试 »

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

示例

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%f", sum); // 2.500000
自己动手试一试 »

既然您已经在上一章中了解了“小数精度”,您可以通过删除多余的零(如果您愿意)使输出更加清晰。

示例

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%.1f", sum); // 2.5
自己动手试一试 »

现实生活中的例子

这是一个关于数据类型和类型转换的实际示例,我们创建一个程序来计算用户分数相对于游戏中最高分数的百分比。

示例

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

// 用户的实际得分
int userScore = 423;

/* 计算用户得分相对于可用最高分数的百分比。
将 userScore 转换为 float,以确保除法准确 */
float percentage = (float) userScore / maxScore * 100.0;

// 打印百分比
printf("User's percentage is %.2f", percentage);
自己动手试一试 »

C 练习

通过练习来测试自己

练习

使用类型转换来确保下面示例的结果1.5,而不仅仅是 1

float sum =  3 / 2;
printf("%.1f", sum);

开始练习



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持