본문 바로가기

Swift

[Swift] 소수점 다루기 반올림(round), 올림(ceil), 내림(floor) 등등

안녕하세요. 

오늘은 소수점을 다룰 때 유용한 swift 함수에 대해 알아보도록 하겠습니다.

수학 시간에 배웠던 반올림, 올림, 내림 내용입니다.

순서

1. 반올림(round)

2. 올림(ceil)

3. 내림(floor)

4. 버림(trunc)

5. 원하는 자리에서 반올림, 올림, 내림

6. n번째 소수점 자르기

 

1. 반올림(round)

소수점이 5보다 크거나 같으면 올리고, 5보다작으면 내립니다. 소수점 자릿수에 대한 지정이 없는 경우 첫 번째 자리로 판단됩니다.

round(5.123)  // 5.0
round(5.456)  // 5.0
round(5.512)  // 6.0
round(5.567)  // 6.0
round(5.657)  // 6.0
round(5.765)  // 6.0
round(-3.453) // -3.0
round(-3.658) // -4.0

2. 올림(ceil)

소수점이 0보다 큰 경우 무조건 올립니다. 소수점을 올리면 정수부가 1 더해지고 소수점은 0이 됩니다.

ceil(5.123)  // 6.0
ceil(5.456)  // 6.0
ceil(5.512)  // 6.0
ceil(5.567)  // 6.0
ceil(5.657)  // 6.0
ceil(5.765)  // 6.0
ceil(-3.453) // -3.0
ceil(-3.658) // -3.0

 

3. 내림(floor)

소수점을 무조건 내립니다. 

floor(5.123)  // 5.0
floor(5.456)  // 5.0
floor(5.512)  // 5.0
floor(5.567)  // 5.0
floor(5.657)  // 5.0
floor(5.765)  // 5.0
floor(-3.453) // -4.0
floor(-3.658) // -4.0

 

4. 버림(trunc)

trunc는 truncate의 약어입니다. SQL 또는 Excel에서 몇 번 접해보셨을 겁니다. 

trunc을 사용하면 말 그대로 소수점을 버립니다. 정수부에는 아무런 영향을 주지 않고 소수점만 지워버립니다.

trunc(5.123)  // 5.0
trunc(5.456)  // 5.0
trunc(5.512)  // 5.0
trunc(5.567)  // 5.0
trunc(5.657)  // 5.0
trunc(5.765)  // 5.0
trunc(-3.453) // -3.0
trunc(-3.658) // -3.0

 

5. n번째 소수점에서 반올림, 올림, 내림

위에서 사용한 방법들은 모두 소수점 첫 번째 자리에서 처리하는 방법이었습니다. 

이번 방법은 원하는 자리에서 행하는 방법입니다. 

 

Swift에서 기본으로 제공하는 함수가 없어 아래와 같은 방법으로 구할 수 있습니다.

소수점 4번째 자리에서 반올림할 경우 1,000을 곱하여 반올림 후 다시 1,000을 나눠주는 방식입니다.

소수점 6번째 자리에서 반올림할 경우 100,000을 곱하여 반올림 후 다시 100,000을 나눠주면 됩니다.

(더 좋은 방법이 있다면 댓글 남겨주시기 바랍니다.)

5.1.  4번째 자리에서 반올림

let digit: Double = pow(10, 3) // 10의 3제곱
round(5.123123 * digit) / digit  // 5.123
round(5.456456 * digit) / digit  // 5.456
round(5.512512 * digit) / digit  // 5.513
round(5.567567 * digit) / digit  // 5.568
round(5.657657 * digit) / digit  // 5.658
round(5.765765 * digit) / digit  // 5.766
round(-3.453453 * digit) / digit // -3.453
round(-3.658658 * digit) / digit // -3.659

5.2.  4번째 자리에서 올림

let digit: Double = pow(10, 3) // 10의 3제곱
ceil(5.123123 * digit) / digit  // 5.124
ceil(5.456456 * digit) / digit  // 5.457
ceil(5.512512 * digit) / digit  // 5.513
ceil(5.567567 * digit) / digit  // 5.568
ceil(5.657657 * digit) / digit  // 5.658
ceil(5.765765 * digit) / digit  // 5.766
ceil(-3.453453 * digit) / digit // -3.453
ceil(-3.658658 * digit) / digit // -3.658

5.3.  4번째 자리에서 내림

let digit: Double = pow(10, 3) // 10의 3제곱
floor(5.123123 * digit) / digit  // 5.123
floor(5.456456 * digit) / digit  // 5.456
floor(5.512512 * digit) / digit  // 5.512
floor(5.567567 * digit) / digit  // 5.567
floor(5.657657 * digit) / digit  // 5.657
floor(5.765765 * digit) / digit  // 5.765
floor(-3.453453 * digit) / digit // -3.454
floor(-3.658658 * digit) / digit // -3.659

 

6. n번째 소수점 자르기

소수점이 터무니없이 길거나, 원하는 자릿수만큼 필요한 경우를 위해 소수점을 n번째까지만 자르는 방법입니다.

String(format:_:...)을 사용한 방법입니다. 

format이 중요한데 "%.nf"를 사용하며, n번째 까지 소수점을 제거한다는 format입니다.

return값은 String이며 사용할 때 잘 확인하시길 바랍니다.

 

let decimal = 5.1231283712893781293
String(format: "%.3f", decimal) // "5.123"
String(format: "%.6f", decimal) // "5.123128"

 

마무리

알고리즘 공부를 하다가 소수점을 다룰일이 생겨 갑작스럽게 포스팅하게 되었습니다.

평소에는 잘 사용하지 않겠지만 거리, 사이즈, 위치 등등을 다룰 때 사용하게 될 것이며 이 글이 유용하게 사용되었으면 좋겠습니다.

감사합니다.

 

반응형