본문 바로가기
Apple/Swift

[Swift] 소수점 제거하기 (반올림, 올림, 내림, 버림 등)

by 어멘드 2022. 1. 13.
반응형

 PS를 하다 보면 반올림, 올림, 내림, 버림 등 소수점을 제거해서 출력해야 할 때가 종종 있다. 찾아보다가 이 모든 것을 전부 할 수 있는 만능 메소드를 찾았다!

 


 FloatingPoint 프로토콜에 정의된 round(_:)라는 메소드이다. 기본 자료형인 FloatDouble 모두 FloatingPoint 프로토콜을 채택하고 있기 때문에 round 메소드 사용이 가능하다.

mutating func round(_ rule: FloatingPointRoundingRule)

 

 형태는 mutating func round(_ rule: FloatingPointRoundingRule). 제거한 결과값을 리턴하는 게 아니라 mutating func이기 때문에 인스턴스 값 자체가 바뀐다. 따라서 immutable 한 값에는 메소드를 쓸 수 없다.

 파라미터로 rule을 넘겨주면, 해당 룰을 적용하여 소수점을 제거해준다. 이 rule의 종류는 반올림, 올림 등 무려 6가지나 있다. 근데 영어라 뭔지 잘 모르겠다ㅎㅎ 하나씩 살펴볼 건데 말로 설명하는 것보다 그냥 예시를 보는 게 이해가 더 빠를 것 같다.

  1. awayFromZero
  2. down
  3. toNearestOrAwayFromZero
  4. toNearestOrEven
  5. towardZero
  6. up

 

 

awayFromZero

  절댓값이 현재보다 크거나 같은 정수 중 가장 가까운 정수로 = 0에서 더 먼 쪽으로 내리거나 올림
(3.1).round(.awayFromZero)  // 4.0
(3.9).round(.awayFromZero)  // 4.0
(-3.1).round(.awayFromZero)  // -4.0
(-3.9).round(.awayFromZero)  // -4.0

 

 

down

  현재보다 작거나 같은 정수 중 가장 가까운 정수로 = 내림
(3.1).round(.down)      // 3.0
(3.9).round(.down)      // 3.0
(-3.1).round(.down)     // -4.0
(-3.9).round(.down)     // -4.0

 

 

toNearestOrAwayFromZero

  가장 가까운 정수로, 만약 두 개가 똑같이 가까우면 절댓값이 더 쪽으로 = 반올림(.5에서는 0에서 더 먼 쪽으로)
(3.1).round(.toNearestOrAwayFromZero)      // 3.0
(3.9).round(.toNearestOrAwayFromZero)      // 4.0
(3.5).round(.toNearestOrAwayFromZero)      // 4.0
(-3.1).round(.toNearestOrAwayFromZero)     // -3.0
(-3.9).round(.toNearestOrAwayFromZero)     // -4.0
(-3.5).round(.toNearestOrAwayFromZero)     // -4.0

 

 

toNearestOrEven

  가장 가까운 정수로, 만약 두 개가 똑같이 가까우면 짝수로 = (?)
(3.1).round(.toNearestOrEven)      // 3.0
(3.9).round(.toNearestOrEven)      // 4.0
(3.5).round(.toNearestOrEven)      // 4.0
(2.5).round(.toNearestOrEven)      // 2.0
(-3.1).round(.toNearestOrEven)     // -3.0
(-3.9).round(.toNearestOrEven)     // -4.0
(-3.5).round(.toNearestOrEven)     // -4.0
(-2.5).round(.toNearestOrEven)     // -2.0

 

 

towardZero

 절댓값이 현재보다 작거나 같은 정수 중 가장 가까운 정수로 = 버림
(3.1).round(.towardZero)      // 3.0
(3.9).round(.towardZero)      // 3.0
(-3.1).round(.towardZero)     // -3.0
(-3.9).round(.towardZero)     // -3.0

 

 

up

 현재보다 크거나 같은 정수 중 가장 가까운 정수로 = 올림
(3.1).round(.up)      // 4.0
(3.9).round(.up)      // 4.0
(-3.1).round(.up)     // -3.0
(-3.9).round(.up)     // -3.0

 

 

반응형

댓글