연습 - 수학 연산 수행
더하기 연산과 더 중요하게는 숫자 및 문자열 데이터 형식 간의 암시적 형식 변환에 대한 기본 사항을 확인했으므로, 이제 숫자 데이터에 대한 다른 몇 가지 일반적인 수학 연산을 살펴봅니다.
기본 수학 연산 수행
정수를 사용하여 더하기, 빼기, 곱하기, 나누기를 수행하는 코드 작성
.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
표시되는 각 기호는 다음과 같습니다.
+
는 더하기 연산자입니다.-
는 빼기 연산자입니다.*
는 곱하기 연산자입니다./
는 나누기 연산자입니다.
그러나 나누기 예제의 결과 몫이 예상과 다를 수 있습니다. int
로 정의되어 있고 int
는 소수점 뒤의 값을 포함할 수 없으므로 소수점 뒤의 값이 quotient
에서 잘립니다.
리터럴 10진수 데이터를 사용하여 나누기를 수행하는 코드 추가
나누기가 제대로 작동하려면 소수점 뒤의 소수 자릿수를 지원하는 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
로 캐스트하려면 값 앞에 캐스트 연산자를 추가합니다. 값 앞에 괄호로 묶은 데이터 형식 이름을 사용하여 값을 캐스팅합니다. 이 경우 first
및 second
변수 앞에 (decimal)
을 추가합니다.
이전 단계의 코드를 삭제하고 .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는 학생들이 연산 순서를 기억하도록 돕는 머리글자어입니다. 순서는 다음과 같습니다.
- P(괄호) - 괄호 안의 내용을 먼저 계산합니다.
- E(지수)
- M(곱하기) 및 D(나누기) - 왼쪽에서 오른쪽으로 계산합니다.
- A(더하기) 및 S(빼기) - 왼쪽에서 오른쪽으로 계산합니다.
C#은 지수를 제외하고 PEMDAS와 동일한 순서를 따릅니다. C#에는 지수 연산자가 없지만 System.Math.Pow 메서드를 사용할 수 있습니다. “C#을 사용하여 .NET 클래스 라이브러리에서 메서드 호출” 모듈에서 이 메서드와 기타 메서드를 설명합니다.
C#의 연산 순서를 연습하는 코드 작성
이전 단계의 코드를 삭제하고 .NET 편집기에 다음 코드를 입력합니다.
int value1 = 3 + 4 * 5; int value2 = (3 + 4) * 5; Console.WriteLine(value1); Console.WriteLine(value2);
동일한 연산을 다른 순서로 수행하면 결과에 차이가 있음을 여기서 확인할 수 있습니다.
코드를 실행합니다. 다음과 같은 출력이 표시됩니다.
23 35
요약
지금까지 C#의 수학 연산에 대해 알아본 내용은 다음과 같습니다.
+
,-
,*
,/
등의 연산자를 사용하여 기본 수학 연산을 수행합니다.- 두 개의
int
값을 나누면 소수점 뒤의 값이 모두 잘립니다. 소수점 뒤의 값을 유지하려면 제수 또는 피제수 중 하나(또는 둘 다)를int
에서decimal
등의 부동 소수점 숫자로 먼저 캐스트해야 하며, 잘림을 방지하기 위해 몫도 동일한 부동 소수점 형식이어야 합니다. - 캐스트 연산을 수행하여 일시적으로 값을 다른 데이터 형식인 것처럼 처리합니다.
%
연산자를 사용하여 나누기 후의 나머지를 캡처합니다.- 연산 순서는 머리글자어 PEMDAS의 규칙을 따릅니다.