Упражнение. Выполнение математических операций
Теперь, когда вы понимаете основы добавления и более важно, неявное преобразование типов между числовыми и строковыми типами данных, давайте рассмотрим несколько других распространенных математических операций с числовыми данными.
Выполнение основных математических операций
Написание кода для выполнения добавления, вычитания, умножения и деления целыми числами
Выберите весь код, который вы написали ранее в редакторе кода C# , и нажмите клавишу DELETE или Backspace , чтобы удалить его.
Введите следующий код в редакторе кода C#:
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 числа, так как он определен как и intintне может содержать значения после десятичного разряда.
Добавление кода для выполнения деления с помощью десятичных литеральных данных
Для правильной работы деления необходимо использовать тип данных, поддерживающий дробные цифры после десятичной запятой, например decimal.
Удалите код из предыдущих шагов и введите следующий код в редактор кода C#:
decimal decimalQuotient = 7.0m / 5; Console.WriteLine($"Decimal quotient: {decimalQuotient}");Выполните код. Должен появиться следующий результат:
Decimal quotient: 1.4
Чтобы это работало, кворот (слева от оператора назначения) должен иметь тип, и по крайней мере один из чисел, разделенных, также должен иметь тип decimal
Ниже приведены два корректных примера.
decimal decimalQuotient = 7 / 5.0m;
decimal decimalQuotient = 7.0m / 5.0m;
Тем не менее следующие строки кода не будут работать (или будут давать неточные результаты):
int decimalQuotientA = 7 / 5.0m;
int decimalQuotientB = 7.0m / 5;
int decimalQuotientC = 7.0m / 5.0m;
decimal decimalQuotientD = 7 / 5;
Добавление кода для приведения результатов целочисленного деления
Что делать, если вы не используете литеральные значения? Другими словами, вам необходимо выполнить деление с использованием двух переменных типа int, но при этом требуется избежать усечения результата? В этом случае следует выполнить приведение типа данных int к decimal. Приведение — это один из способов преобразования данных, в рамках которого компилятор временно обрабатывает указанное значение как значение с другим типом данных.
Чтобы привести значение int к типу decimal, необходимо добавить перед этим значением оператор приведения. Имя типа данных, окруженного круглыми скобками перед значением, используется для его приведения. В этом случае вы добавите (decimal) перед переменными first и second.
Удалите код из предыдущих шагов и введите следующий код в редактор кода C#:
int first = 7; int second = 5; decimal quotient = (decimal)first / (decimal)second; Console.WriteLine(quotient);Выполните код. Должен появиться следующий результат:
1.4
Примечание.
Вы видели три использования для оператора круглых скобок: вызов метода, порядок операций и приведение.
Написание кода, чтобы определить оставшуюся часть после целочисленного деления
Оператор модуля % сообщает оставшуюся часть деления int . Фактически с его помощью вы можете узнать, делится ли одно число на другое. Например, этот оператор можно использовать в ходе длительных операций, связанных с циклической обработкой нескольких сотен или даже тысяч записей данных, чтобы показывать конечному пользователю уведомление после обработки каждых следующих 100 записей.
Удалите код из предыдущих шагов и введите следующий код в редактор кода C#:
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#
Удалите код из предыдущих шагов и введите следующий код в редактор кода C#:
int value1 = 3 + 4 * 5; int value2 = (3 + 4) * 5; Console.WriteLine(value1); Console.WriteLine(value2);Здесь вы увидите разницу при выполнении одинаковых операций в другом порядке.
Выполните код. Должен появиться следующий результат:
23 35
Кратко
Вот что вы узнали до сих пор о математических операциях в C#:
- Для выполнения основных математических операций используются операторы
+,-,*и/. - При делении двух значений типа
intвсе десятичные разряды результата после запятой будут усечены. Чтобы сохранить значения после десятичной запятой, необходимо привести разделитель или дивиденд (или оба) изintчисла с плавающей запятой, напримерdecimalсначала, то кворот должен иметь один и тот же тип с плавающей запятой, а также, чтобы избежать усечения. - Чтобы временно обрабатывать значение как значение другого типа данных, следует выполнить операцию приведения.
- Для получения остатка от деления используйте оператор
%. - Порядок выполнения математических операций можно запомнить с помощью аббревиатуры СЭУДПВ.