🧑‍💻/Swift

Swift5 나머지 구하기, 홀수 짝수 구하기

유리맥 2020. 8. 12. 22:37
반응형

Swift에서 나머지를 구하기 위한 몇가지 방법이 있습니다.

1. % 사용

%를 사용하여 나머지를 구할 수 있습니다.

그 예로 0이면 짝수, 나머지가 1이면 홀수로 판별할 수 있습니다.

// 홀수
func isOdd(_ number: Int) -> Bool {
    return 1 == number % 2
}

// 짝수
func isEven(_ number: Int) -> Bool {
    return 0 == number % 2
}

print(isEven(10))	// true
print(isOdd(12))	// false

 

주의할 점은 %를 사용하기 위해서는 피연산자가 모두 Int형이어야 합니다.

하지만 둘 중 하나라도 Float형, Double형일 경우 '%' is unavailable: For floating point numbers use truncatingRemainder instead 에러가 발생합니다.

 

2. truncatingRemainder(dividingBy:) 사용

Double형인 상수, 변수에 .으로 truncatingRemainder를 호출할 수 있습니다.

Int형에서 호출 시 truncatingRemainder가 자동완성되지 않지만

수동으로 호출 시 사용 가능합니다.

let remainder = 5.0.truncatingRemainder(dividingBy: 2)  // 1
let remainder2 = 10.truncatingRemainder(dividingBy: 4)  // 2

 

truncatingRemainder에 대해 검색하다 보면 remainder가 나오는데 ... 둘의 차이점을 알아봅시다.

 

3. truncatingRemainder vs remainder

truncatingRemainder(dividingBy:)와 remainder(dividingBy:)는 몫에 따라 나머지를 달리합니다.

 

var x = 8.625
let y = 0.74

(x/y).rounded(.towardZero)              // 11.5 -> 11
x.truncatingRemainder(dividingBy: y)    // 0.375
x == 0.75 * 11 + 0.375

(x/y).rounded(.toNearestOrEven)         // 11.5 -> 12
x.remainder(dividingBy: y)              // -0.375
x == 0.75 * 12 - 0.375

truncatingRemainder의 몫은 소숫점 발생 시 0에 가까운 정수입니다. >> 몫은 11, 나머지는 0.375가 됩니다.

remainder의 몫은 소숫점 발생 시 가까운 짝수 정수를 택합니다. >> 몫은 12, 나머지는 -0.375가 됩니다.

 

var x = -8.625
let y = -0.75

(x/y).rounded(.towardZero)              // 11.5 -> 11
x.truncatingRemainder(dividingBy: y)    // -0.375
x == -0.75 * 11 - 0.375

(x/y).rounded(.toNearestOrEven)         // 11.5 -> 12
x.remainder(dividingBy: y)              // 0.375
x == -0.75 * 12 + 0.375

같은 방법으로 음수에 적용 시 truncatingRemainder는 -0.375, remainder는 0.375가 되는 걸 알 수 있습니다.

반응형