如何在 C 中使用整数和浮点数#

本教程将介绍 C# 中的数值类型。 你将编写少量的代码,然后编译并运行这些代码。 本教程包含一系列课程,用于探索 C# 中的数字和数学运算。 这些课程介绍了 C# 语言的基础知识。

小窍门

当代码片段块包含“运行”按钮时,该按钮将打开交互式窗口,或替换交互式窗口中的现有代码。 当代码片段不包含“运行”按钮时,可以复制代码并将其添加到当前交互式窗口。

探索整数数学

在交互式窗口中运行以下代码。

int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);

前面的代码演示了具有整数的基本数学运算。 该 int 类型表示 整数、正整数或负整数。 使用符号 + 进行加法运算。 整数的其他常见数学运算包括:

  • -:减法运算
  • *:乘法运算
  • /:除法运算

首先探索这些不同的操作。 修改第三行来尝试这些操作中的每一个。 例如,若要尝试减法,请将+替换为-,如以下行所示:

int c = a - b;

试一试。 选择“运行”按钮。 然后,尝试乘法*,并尝试除法/。 如果愿意,还可以在同一行中编写多个数学运算来试验。

小窍门

在探索 C#(或任何编程语言)的过程中,可能会在编写代码时犯错。 编译器会找到这些错误并将其报告给你。 当输出包含错误消息时,请仔细查看示例代码,以及交互式窗口中的代码以查看要修复的内容。 该练习有助于学习 C# 代码的结构。

探索运算顺序

C# 语言定义不同数学运算的优先级,其规则与在数学中学到的规则一致。 乘法和除法优先于加减。 通过在交互式窗口中运行以下代码来探索该功能:

int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);

输出演示在加法之前执行乘法。

可以通过在要优先执行的运算或操作周围添加括号来强制执行不同的运算顺序。 将以下行添加到交互式窗口:

d = (a + b) * c;
Console.WriteLine(d);

通过组合许多不同的操作来探索更多可能性。 将上述代码中的第四行替换为如下所示的内容:

d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);

你可能会注意到整数的有趣特性。 整数除法始终生成整数结果,即使您期望结果包含小数或分数部分。

请尝试以下代码:

int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
Console.WriteLine(d);

探索整数精度和限制

最后一个示例显示整数除法截断了结果。 可以使用余数运算符(字符%)获取余数

int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
int e = (a + b) % c;
Console.WriteLine($"quotient: {d}");
Console.WriteLine($"remainder: {e}");

C# 整数类型与其他数学整数不同:该 int 类型具有最小和最大限制。 请尝试以下代码查看这些限制:

int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");

如果计算产生了超出这些限制的值,您将遇到下溢或者溢出条件。 答案似乎是从一个限值覆盖到另一个限值的范围。 若要查看示例,请在交互式窗口中添加这两行:

int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");

请注意,答案非常接近最小(负)整数。 这与 min + 2 相同。 加法运算 溢出了 整数的允许值。 答案是一个大负数,因为溢出会导致整数值从最大可能的值“回绕”到最小值。

如果 int 类型不满足您的需求,还有其他数值类型具有不同的限制和精度可供使用。 接下来,让我们探讨这些类型的数字。

使用双精度类型

数值 double 类型表示双精度浮点数。 你可能不熟悉这些术语。 浮点数可用于表示可能较大或较小数量的非整数。 双精度 是一个相对术语,用于描述用于存储值的二进制数字数。 双精度 数的二进制位数是 单精度的两倍。 在现代计算机上,使用双精度比单精度数字更常见。 单精度数字使用float关键字声明。 让我们来探索一下。 运行以下代码并查看结果:

double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);

可以看到,答案商包含小数部分。 试试对双精度类型使用更复杂一点的表达式。 可以使用以下值,或替换其他数字:

double a = 19;
double b = 23;
double c = 8;
double d = (a + b) / c;
Console.WriteLine(d);

双精度值的范围大于整数值。 在交互式窗口中尝试以下代码:

double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");

这些值以科学表示法打印。 E 之前的数字有符号。 E 后面的数字是指数,作为 10 的幂。

与数学上的十进制数字一样,C# 中的双精度值可能会有四舍五入误差。 请尝试以下代码:

double third = 1.0 / 3.0;
Console.WriteLine(third);

你知道 0.33/10,而与 1/3 并不完全相同。 同样, 0.3333/100。 该值更接近1/3,但仍不精确。 无论添加多少小数位数,舍入误差仍然存在。

挑战

尝试使用double类型进行大数、小数的其他计算,以及乘法和除法。 尝试更复杂的计算。

使用十进制类型

还有一种类型需要学习:decimal 类型。 该 decimal 类型的范围较小,但精度大于 double。 让我们来实际操作一下:

decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");

请注意,范围小于 double 类型。 可以通过尝试以下代码来查看小数类型的更高精度:

double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);

decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);

请注意,使用小数类型的数学运算在小数点右侧具有更多的数字。

数字 M 上的后缀是指示常量应使用 decimal 类型的方式。 否则,编译器将假定类型 double

注释

该字母M被选为两个关键字之间doubledecimal视觉上最明显的字母。

挑战

编写代码,用于计算半径为 2.50 厘米的圆的面积。 请记住,圆的面积是半径平方乘以 PI。 一个提示:.NET 包含 PI 的常量, Math.PI 可用于该值。 Math.PI与命名空间中 System.Math 声明的所有常量一样,是一个 double 值。 因此,对于此挑战,应使用 double 值而不是 decimal 值。

你应该得到 19 到 20 之间的答案。

一旦你尝试了,打开详细信息窗格以查看你的表现如何。

double radius = 2.50;
double area = Math.PI * radius * radius;
Console.WriteLine(area);

如果需要,请尝试其他公式。

已完成“C# 中的数字”交互式教程。 可以选择 元组和类型 链接以开始下一个交互式教程,也可以访问 .NET 站点以下载 .NET SDK、在计算机上创建项目以及继续编码。 “后续步骤”部分将引导您返回这些教程。

可以在以下文章中详细了解 C# 中的数字: