Упражнение. Выполнение математических операций
Теперь, когда вы понимаете основы добавления и более важно, неявное преобразование типов между числовыми и строковыми типами данных, давайте рассмотрим несколько других распространенных математических операций с числовыми данными.
Выполнение основных математических операций
Написание кода для выполнения добавления, вычитания, умножения и деления целыми числами
Выделите весь код в редакторе .NET и нажмите клавишу DELETE или BACKSPACE, чтобы удалить его.
Введите следующий код в редакторе .NET:
int sum = 7 + 5; int difference = 7 - 5; int product = 7 * 5; int quotient = 7 / 5; Console.WriteLine("Sum: " + sum); Console.WriteLine("Difference: " + difference); Console.WriteLine("Product: " + product); Console.WriteLine("Quotient: " + quotient);
Выполните код. Должен появиться следующий результат:
Sum: 12 Difference: 2 Product: 35 Quotient: 1
Вы можете видеть следующее.
+
— это оператор сложения-
— это оператор вычитания*
— это оператор умножения/
— это оператор деления
Однако результирующий кворот примера деления может не быть ожидаемым. Значения после десятичного разряда усечены из quotient
числа, так как он определен как и int
int
не может содержать значения после десятичного разряда.
Добавление кода для выполнения деления с помощью десятичных литеральных данных
Для правильной работы деления необходимо использовать тип данных, поддерживающий дробные цифры после десятичной запятой, например decimal
.
Удалите код из предыдущих шагов и введите следующий код в редактор .NET:
decimal decimalQuotient = 7.0m / 5; Console.WriteLine($"Decimal quotient: {decimalQuotient}");
Выполните код. Должен появиться следующий результат:
Decimal quotient: 1.4
Чтобы это работало, кворот (слева от оператора назначения) должен иметь тип, и по крайней мере один из чисел, разделенных, также должен иметь тип decimal
(оба числа также могут быть типом decimal
decimal
).
Ниже приведены два корректных примера.
decimal decimalQuotient = 7 / 5.0m;
decimal decimalQuotient = 7.0m / 5.0m;
Тем не менее следующие строки кода не будут работать (или будут давать неточные результаты):
int decimalQuotient = 7 / 5.0m;
int decimalQuotient = 7.0m / 5;
int decimalQuotient = 7.0m / 5.0m;
decimal decimalQuotient = 7 / 5;
Добавление кода для приведения результатов целочисленного деления
Что делать, если вы не используете литеральные значения? Другими словами, вам необходимо выполнить деление с использованием двух переменных типа int
, но при этом требуется избежать усечения результата? В этом случае следует выполнить приведение типа данных int
к decimal
. Приведение — это один из способов преобразования данных, в рамках которого компилятор временно обрабатывает указанное значение как значение с другим типом данных.
Чтобы привести значение int
к типу decimal
, необходимо добавить перед этим значением оператор приведения. Имя типа данных, окруженного круглыми скобками перед значением, используется для его приведения. В этом случае вы добавите (decimal)
перед переменными first
и second
.
Удалите код из предыдущих шагов и введите следующий код в редактор .NET:
int first = 7; int second = 5; decimal quotient = (decimal)first / (decimal)second; Console.WriteLine(quotient);
Выполните код. Должен появиться следующий результат:
1.4
Примечание.
Вы видели три использования для оператора круглых скобок: вызов метода, порядок операций и приведение.
Написание кода, чтобы определить оставшуюся часть после целочисленного деления
Оператор модуля %
сообщает оставшуюся часть деления int
. Фактически с его помощью вы можете узнать, делится ли одно число на другое. Например, этот оператор можно использовать в ходе длительных операций, связанных с циклической обработкой нескольких сотен или даже тысяч записей данных, чтобы показывать конечному пользователю уведомление после обработки каждых следующих 100 записей.
Удалите код из предыдущих шагов и введите следующий код в редактор .NET:
Console.WriteLine($"Modulus of 200 / 5 : {200 % 5}"); Console.WriteLine($"Modulus of 7 / 5 : {7 % 5}");
Выполните код. Должен появиться следующий результат:
Modulus of 200 / 5 : 0 Modulus of 7 / 5 : 2
Если остаток равен 0, значит, делимое делится на делитель.
Порядок операций
Как вы узнали в предыдущем упражнении, вы можете использовать ()
символы в качестве порядка операторов операций . Тем не менее сделать это можно и другими способами.
В математике PEMDAS является акронимом, который помогает учащимся запоминать порядок операций. Порядок должен быть следующим.
- Скобки (в первую очередь выполняются выражения в скобках)
- Экспоненты и степени
- Умножение и Деление (слева направо)
- Прибавление (сложение) и Вычитание (слева направо)
В C# порядок операций СЭУДПВ соблюдается для всех операций, кроме возведения в степень. Несмотря на отсутствие экспонентного оператора в C#, этот метод можно использовать System.Math.Pow . Сведения об этом и других методах см. в модуле, посвященном вызову методов из библиотеки классов .NET с использованием C#.
Написание кода для выполнения порядка операций C#
Удалите код из предыдущих шагов и введите следующий код в редактор .NET:
int value1 = 3 + 4 * 5; int value2 = (3 + 4) * 5; Console.WriteLine(value1); Console.WriteLine(value2);
Здесь вы увидите разницу при выполнении одинаковых операций в другом порядке.
Выполните код. Должен появиться следующий результат:
23 35
Кратко
Вот что вы узнали до сих пор о математических операциях в C#:
- Для выполнения основных математических операций используются операторы
+
,-
,*
и/
. - При делении двух значений типа
int
все десятичные разряды результата после запятой будут усечены. Чтобы сохранить значения после десятичной запятой, необходимо привести разделитель или дивиденд (или оба) изint
числа с плавающей запятой, напримерdecimal
сначала, то кворот должен иметь один и тот же тип с плавающей запятой, а также, чтобы избежать усечения. - Чтобы временно обрабатывать значение как значение другого типа данных, следует выполнить операцию приведения.
- Для получения остатка от деления используйте оператор
%
. - Порядок выполнения математических операций можно запомнить с помощью аббревиатуры СЭУДПВ.