숫자

숫자 에서 Swift

1개의 연습 문제

숫자 소개

숫자

Swift는 숫자를 크게 두 가지 범주로 나눠요. 정수와 실수예요.

  • 정수는 0, 1, -1, 42, -273처럼 소수 부분이 없는 수를 나타내요.
  • 실수는 0.0, 3.14, -1.36969e-10처럼 소수 부분이 있는 수를 나타내요.

숫자 리터럴에 밑줄을 넣으면 읽기 쉬워져요. 1_000_000은 1000000과 완전히 같아요. 실수 리터럴은 십진 표기법이나 지수 표기법으로 쓸 수 있어요.

대부분의 경우 정수에는 Int를, 실수에는 Double을 사용해요.

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

산술 연산자

Swift는 숫자 계산을 위한 표준 산술 연산자를 제공해요.

연산자 설명 예시
+ 덧셈 4 + 6의 결과는 10
- 뺄셈 15 - 10의 결과는 5
* 곱셈 2 * 3의 결과는 6
Caution

Swift는 타입에 안전해서 산술 연산에서 서로 다른 숫자 타입을 섞는 것을 허용하지 않아요. Int와 Double을 바로 더하거나 곱할 수는 없어요. 먼저 둘 중 하나의 타입을 다른 쪽에 맞게 변환해야 해요.

나눗셈

/ 연산자는 나눗셈을 해요. 두 피연산자가 모두 정수라면 정수 나눗셈이 소수 부분을 버려요.

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

0이 아닌 실수를 0으로 나누면 inf나 -inf가 돼요. 0.0을 0.0으로 나누면 nan(Not a Number)이 나와요. 반면 정수를 0으로 나누면 컴파일 시점이나 실행 시점에 오류가 발생해요.

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

나머지 연산자

나머지 연산자 (%)는 두 정수를 나눈 뒤 남는 나머지를 계산해요.

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

Swift에서 %는 모듈로 연산자가 아니라 진짜 나머지 연산자예요. 결과는 두 번째 피연산자의 부호와 상관없이 항상 첫 번째 피연산자(피제수)의 부호를 따라요.

5 % -2  // 1
-5 % 2  // -1

실수 반올림하기

rounded() 메서드로 실수를 반올림할 수 있어요. 기본적으로 rounded()는 가장 가까운 정수로 반올림해요. .up이나 .down 같은 반올림 규칙을 직접 지정할 수도 있어요.

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

타입 추론

타입을 명시하지 않고 숫자 상수나 변수를 선언하면 Swift가 타입을 추론해요.

  • 소수 부분이 없는 수는 기본적으로 Int가 돼요.
  • 소수점이 있는 수는 기본적으로 Double이 돼요.
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

타입 변환

서로 다른 타입의 값끼리 연산하려면 Double(_:)이나 Int(_:) 같은 타입 이니셜라이저로 값 하나를 변환해요.

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)
GitHub에서 편집 링크가 새 창이나 탭에서 열려요

숫자 배우기