Menu
×
   ❮   
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
尝试一下 »

如您所见,编译器会自动将 int 值 9 转换为 float 值 9.000000

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

特别是如果反过来 - 以下示例会自动将 float 值 9.99 转换为 int 值 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("用户的百分比是 %.2f", percentage);
尝试一下 »

C 练习

通过练习测试自己

练习

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

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

开始练习



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.