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

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

在本教程中,你将:

  • 使用 C# 开发环境启动 GitHub Codespace。
  • 探索整数数学。
  • 了解运算顺序。
  • 了解整数限制和精度。
  • 了解浮点类型。
  • 了解十进制类型。

先决条件

您必须拥有以下之一:

探索整数数学

若要使用教程环境启动 GitHub Codespace,请打开 教程 codespace 存储库的浏览器窗口。 选择绿色 “代码 ”按钮和 “代码空间 ”选项卡。然后选择该 + 符号以使用此环境创建新的 Codespace。 如果已完成 hello world 教程,则可以打开该代码空间,而不是创建新的代码空间。

  1. 加载代码空间时,在名为 numbers.cs教程文件夹中创建新文件。

  2. 打开新文件。

  3. 将以下代码键入或复制到 numbers.cs

    int a = 18;
    int b = 6;
    int c = a + b;
    Console.WriteLine(c);
    
  4. 通过在集成终端中键入以下命令来运行此代码:

    cd ./tutorials
    dotnet numbers.cs
    

    你看到了包含整数的基本数学运算之一。 该 int 类型表示 整数、零、正或负整数。 使用符号 + 进行加法运算。 整数的其他常见数学运算包括:

    • -:减法运算
    • *:乘法运算
    • /:除法运算
  5. 首先探索这些不同的操作。 在写入以下值的 c行后面添加以下行:

    // subtraction
    c = a - b;
    Console.WriteLine(c);
    
    // multiplication
    c = a * b;
    Console.WriteLine(c);
    
    // division
    c = a / b;
    Console.WriteLine(c);
    
  6. 在终端窗口中键入dotnet numbers.cs来运行此代码。

如果愿意,还可以在同一行中编写多个数学运算来试验。 例如,请尝试 c = a + b - 12 * 17; 。 允许混合变量和常量数。

小窍门

在浏览 C# (或任何编程语言)时,编写代码时可能会出错。 编译器会找到这些错误并将其报告给你。 当输出包含错误消息时,请仔细查看窗口中的示例代码和代码,以查看要修复的内容。 你还可以要求科皮洛特找出差异或发现错误。 该练习有助于学习 C# 代码的结构。

你完成了第一步。 在下一部分开始之前,让我们将当前代码移到单独的 方法中。 方法是一系列组合在一起并给定名称的语句。 通过编写方法名称后跟 () 来调用方法。 将代码组织到方法中可以更轻松地开始使用新示例。 完成后,代码应如下所示:

WorkWithIntegers();

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


    // subtraction
    c = a - b;
    Console.WriteLine(c);

    // multiplication
    c = a * b;
    Console.WriteLine(c);

    // division
    c = a / b;
    Console.WriteLine(c);
}

探索运算顺序

  1. 注释掉调用 WorkingWithIntegers()。 在此部分工作时,这会使输出变得不那么混乱。

    //WorkWithIntegers();
    

    // C# 中启动 注释 。 注释是在源代码中需要保留但不执行为代码的任何文本。 编译器不会从注释生成任何可执行代码。 由于 WorkWithIntegers() 是一种方法,因此只需注释掉一行。

  2. C# 语言定义不同数学运算的优先级,其规则与在数学中学到的规则一致。 乘法和除法优先于加减。 通过在调用 WorkWithIntegers()后添加以下代码,并在终端窗口中键入 dotnet numbers.cs,探索此功能:

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

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

  3. 可以通过在要优先执行的运算或操作周围添加括号来强制执行不同的运算顺序。 添加以下行并再次运行:

    d = (a + b) * c;
    Console.WriteLine(d);
    
  4. 通过组合许多不同的操作来探索更多可能性。 添加类似于以下行的内容。 在终端窗口中重试 dotnet numbers

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

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

  5. 如果未看到此行为,请尝试以下代码:

    int e = 7;
    int f = 4;
    int g = 3;
    int h = (e + f) / g;
    Console.WriteLine(h);
    
  6. 在终端窗口中再次键入 dotnet numbers.cs 以查看结果。

在继续之前,让我们将本部分中编写的所有代码汇总并创建一个新方法。 调用新方法 OrderPrecedence。 代码应如下所示:

// WorkWithIntegers();
OrderPrecedence();

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


    // subtraction
    c = a - b;
    Console.WriteLine(c);

    // multiplication
    c = a * b;
    Console.WriteLine(c);

    // division
    c = a / b;
    Console.WriteLine(c);
}

void OrderPrecedence()
{
    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 e = 7;
    int f = 4;
    int g = 3;
    int h = (e + f) / g;
    Console.WriteLine(h);
}

探索整数精度和限制

前面的示例显示整数除法截断了结果。 可以使用余数运算符(字符)获取%

  1. 在方法调用 OrderPrecedence()后尝试以下代码:

    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}");
    
  2. C# 整数类型与其他数学整数不同:该 int 类型具有最小和最大限制。 请尝试以下代码查看这些限制:

    int max = int.MaxValue;
    int min = int.MinValue;
    Console.WriteLine($"The range of integers is {min} to {max}");
    
  3. 如果计算产生了超出这些限制的值,您将遇到下溢或者溢出条件。 答案似乎是从一个限值覆盖到另一个限值的范围。 若要查看示例,请将这两行添加到代码:

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

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

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

使用双精度类型

数值 double 类型表示双精度浮点数。 你可能不熟悉这些术语。 浮点数可用于表示可能非常大或较小的非整型数。 双精度 是一个相对术语,用于描述用于存储值的二进制数字数。 双精度 数的二进制位数是 单精度的两倍。 在现代计算机上,通常使用双精度而不是单精度数字。 通过使用float声明单精度数字。 让我们来探索一下。

  1. 添加以下代码并查看结果:

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

    可以看到,答案商包含小数部分。

  2. 试试对双精度类型使用更复杂一点的表达式。 可以使用以下值,或替换其他数字:

    double a = 19;
    double b = 23;
    double c = 8;
    double d = (a + b) / c;
    Console.WriteLine(d);
    
  3. 双精度值的范围远大于整数值。 尝试将以下代码添加到你到目前为止所写的内容中:

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

    这些值以科学表示法打印。 左侧 E 的数字是标志。 右侧的数字是指数,作为 10 的幂。

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

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

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

挑战

尝试进行其他计算,包括使用大数字、小数字、乘法和除法,使用 double 类型。 尝试更复杂的计算。 在这个挑战上花些时间后,把你写的代码放到一个新方法中。 将新方法 WorkWithDoubles命名为 。

使用十进制类型

你看到了 C# 中的基本数值类型:整数和双精度值。 还有一种类型需要学习:decimal 类型。 该 decimal 类型的范围较小,但精度大于 double

  1. 让我们来实际操作一下:

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

    请注意,范围小于 double 类型。

  2. 可以通过尝试以下代码来查看小数类型的更高精度:

    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# 中的数字:

清理资源

GitHub 会在 30 天不活动后自动删除 Codespace。 如果打算探索本系列中的更多教程,您可以保留 Codespace 配置。 如果已准备好访问 .NET 站点 来下载 .NET SDK,则可以删除 Codespace。 若要删除 Codespace,请打开浏览器窗口并转到 Codespaces。 应该会在窗口中看到代码空间的列表。 在学习教程代码空间的条目中选择三个点(...),然后选择 “删除”。

后续步骤