ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift5 나머지 구하기, 홀수 짝수 구하기
    🧑‍💻/Swift 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가 되는 걸 알 수 있습니다.

    반응형

    댓글

Designed by Tistory.