Управление числами целочисленных и с плавающей запятой
Это руководство поможет в интерактивном изучении числовых типов в C# с помощью браузера. Вы напишете код C# и сможете просмотреть результаты его компиляции и выполнения. Руководство содержит ряд уроков, в которых рассматриваются числа и математические операции в C#. В рамках этих занятий вы ознакомитесь с основами языка C#.
Совет
Чтобы вставить фрагмент кода в режим фокусировки, следует использовать сочетание клавиш (CTRL + v или cmd + v).
Вычисления с целыми числами
Запустите приведенный ниже код в интерактивном окне. Нажмите кнопку Перейти в режим фокусировки. Затем введите следующий блок кода в интерактивном окне и нажмите кнопку Выполнить:
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
Если вы работаете в своей среде, следуйте инструкциям для локальной версии.
Вы увидели одну из основных математических операций с целыми числами. Тип int
представляет целое положительное или отрицательное число. Для сложения используйте символ +
. Другие стандартные математические операции с целыми числами включают:
-
— вычитание;*
— умножение;/
— деление.
Совет
Вы можете изучить их самостоятельно с помощью этого интерактивного руководства. Для этого нужно изменить написанный код в интерактивном окне. Это руководство содержит примеры, которые вы можете повторить на каждом этапе.
Начните с ознакомления с различными операциями. Измените третью строку, чтобы попробовать выполнить каждую операцию. После каждого изменения нажимайте кнопку Выполнить.
Subtraction (вычитание):
int c = a - b;
Multiplication (умножение):
int c = a * b;
Подразделение:
int c = a / b;
Можно также поэкспериментировать, написав несколько математических операций в одной строке.
Совет
Вероятнее всего, при изучении C# (как и любого другого языка программирования) вы будете допускать ошибки в коде. Компилятор найдет эти ошибки и сообщит вам о них. Если результат содержит сообщения об ошибках, внимательно просмотрите пример кода и код в интерактивном окне, чтобы понять, что нужно исправить. Это упражнение поможет вам изучить структуру кода C#.
Изучение порядка операций
Язык C# определяет приоритет математических операций в соответствии с правилами математики. Умножение и деление имеют приоритет над сложением и вычитанием. Убедитесь в этом, запустив следующий код в интерактивном окне:
int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);
В выходных данных видно, что умножение выполняется раньше сложения.
Можно применить другую последовательность операций. Для этого операции, которые должны выполняться первыми, нужно заключить в скобки:
int a = 5;
int b = 4;
int c = 2;
int d = (a + b) * c;
Console.WriteLine(d);
Поэкспериментируйте, объединяя различные операции. Замените четвертую строку примерно таким кодом:
int d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Возможно, вы заметили интересное поведение целых чисел. Деление целых чисел всегда дает результат в виде целого числа, даже если ожидаемый результат содержит десятичную или дробную часть.
Если вы еще не видели пример такого поведения, выполните следующий код:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
Console.WriteLine(d);
Снова нажмите кнопку Выполнить, чтобы просмотреть результаты.
Изучение точности и ограничений для целых чисел
В последнем примере вы увидели, что при делении целых чисел результат усекается.
Вы можете получить остаток с помощью оператора remainder, который обозначается символом %
.
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
Числовой тип double
представляет число с плавающей запятой двойной точности. Эти термины могут быть новыми для вас. Число с плавающей запятой можно использовать для представления нецелых чисел, которые могут быть очень большими или малыми. Число двойной точности — это относительный термин, описывающий количество двоичных разрядов, используемых для хранения значения. Числа двойной точности имеют в два раза больше двоичных символов по сравнению с числами одиночной точности. На современных компьютерах числа с двойной точностью используется чаще, чем с одиночной. Числа одиночной точности объявляются с помощью ключевого слова float
.
Рассмотрим их. Запустите следующий код в интерактивном окне и посмотрите на результат:
double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);
Обратите внимание, что ответ включает десятичную долю частного. Попробуйте более сложное выражение с типом double:
double a = 19;
double b = 23;
double c = 8;
double d = (a + b) / c;
Console.WriteLine(d);
Диапазон значений типа double гораздо больше, чем диапазон значений целых чисел. Запустите этот код в интерактивном окне:
double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");
Значения выводятся в экспоненциальном представлении. Число слева от символа E
является значащим. Число справа — это показатель степени, который равен 10.
Так же, как десятичные числа в математике, значения double в C# могут содержать ошибки округления. Выполните этот код:
double third = 1.0 / 3.0;
Console.WriteLine(third);
Вы знаете, что 0.3
имеет значение 3/10
и не равняется 1/3
. Аналогично 0.33
имеет значение 33/100
. Это ближе к 1/3
, но по-прежнему неточно.
Задача
Выполните другие вычисления с большими числами, малыми числами, умножением и делением с помощью типа double
. Попробуйте выполнить более сложные вычисления.
Работа с десятичными типами
Вы уже ознакомились с базовыми числовыми типами в C# — целыми числами и числами типа 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
. Вы можете убедиться в повышении точности при использовании типа decimal, выполнив следующий код:
double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);
decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);
Обратите внимание, что при вычислении с использованием типа decimal справа от запятой содержится больше цифр.
Суффикс M
возле чисел указывает, что для константы должен использоваться тип decimal
. В противном случае компилятор предполагает тип double
.
Примечание.
Буква M
была выбрана потому, что визуально показывает различия между ключевыми словами double
и decimal
.
Задача
Теперь, когда вы ознакомились с разными числовыми типами, напишите код, который позволяет вычислить площадь круга с радиусом 2,50 см. Помните, что площадь круга равна квадрату радиуса, умноженному на число пи. Подсказка: в .NET есть константа пи Math.PI, которую можно использовать. Math.PI, как и все константы, объявленные в пространстве имен System.Math
, — это значение double
. По этой причине вместо значений decimal
для этой задачи следует использовать double
.
Вы должны получить ответ от 19 до 20.
Выполнение задачи
В результате получилось нечто подобное?
double radius = 2.50;
double area = Math.PI * radius * radius;
Console.WriteLine(area);
При желании поэкспериментируйте с другими формулами.
Поздравляем!
Вы выполнили все задачи в интерактивном руководстве "Числа в C#". Вы можете щелкнуть ссылку Ветви и циклы ниже, чтобы запустить следующее интерактивное руководство, либо посетить сайт .NET, чтобы скачать пакет SDK для .NET, создать проект на своем компьютере и продолжить написание кода. В разделе "Дальнейшие действия" вы вернетесь к этим учебникам.
Дополнительные сведения о числах в C# см. в следующих статьях:
Возникла проблема с этим разделом? Если это так, отправьте нам отзыв, чтобы мы исправили этот раздел.