단순하게 숫자를 문자열로 반환하는 방법은 매우 간단합니다.
문자열 보간법(String Interpolation) \( )
을 사용하면 간단하게 문자열로 반환 가능
하지만 원주율(π) 같은 무한소수 또는 소숫자리가 긴 숫자를 문자열로 반환해야 할 때는 반올림과 같은 특정 작업을 취해야 합니다.
이러한 작업은 크게 "출력 형식 지정자(Format Specifiers)"와 "NumberFormatter 클래스"를 이용하는 방법이 있습니다.
문자열(String)의 다양한 생성자 중 String(format: "자릿수", 변수)
을 사용하면 원하는 형식의 숫자 값을 얻을 수 있습니다.
✅ 소숫자리의 형식 지정
String(format: "%원하는 소수점f", 변수)
var pi = 3.141592653589793 print("원주율: \(pi)") // 원주율: 3.141592653589793 print("원주율: \(String(format: "%.2f", pi))") // 반올림해서 소수 두 번째 자리까지 print("원주율: \(String(format: "%.3f", pi))") // 반올림해서 소수 세 번째 자리까지 print("원주율: \(String(format: "%010.3f", pi))") // 10자리로 + 공백은 0으로 + 반올림해서 소수 세 번째 자리까지 출력 /*출력 결과 원주율: 3.141592653589793 원주율: 3.14 원주율: 3.142 원주율: 000003.142 // 소수점 (.) 포함 10자리 */
✅ 정수의 형식 지정
String(format: "%원하는 자릿수d", 변수)
var n = 5 print("숫자: \(n)") // 일반적인 출력 print("숫자: \(String(format: "%2d", n))") // 두 자리로 출력 print("숫자: \(String(format: "%3d", n))") // 세 자리로 출력 print("숫자: \(String(format: "%03d", n))") // 세 자리로 + 공백은 0으로 출력 /*출력 결과 숫자: 5 숫자: 5 숫자: 5 숫자: 005 */
또한 String(format: "자릿수", 변수)
생성자는 숫자뿐만 아니라 문자열의 형식도 변환할 수 있습니다.
✅ 문자열의 형식 지정
String(format: "문자%@", 변수)
var name = "수" print(String(format: "김철%@", name)) // 김철수
문자열의 할당 순서를 지정할 수도 있습니다.
String(format: "%n$@ %m$@", n변수, m변수)
var firstName = "철수" var secondName = "김" print(String(format: "%1$@ %2$@", firstName, secondName)) // 철수 김 print(String(format: "%2$@ %1$@", firstName, secondName)) // 김 철수
NumberFormatter 클래스는 숫자를 문자열로 변환해주는 클래스입니다.
NumberFormatter 클래스 내부에 정의된 속성을 사용하는 방식으로 간편하게 사용할 수 있다는 장점이 있습니다.
NumberFormatter 클래스 내부에 정의된 속성은 아래와 같습니다.
설정 가능한 속성 | 속성 기능 |
---|---|
.roundingMode | 반올림 모드 |
.maximumSignificantDigits | 최대자릿수 |
.minimumSignificantDigits | 최소자릿수 |
.numberStyle | 숫자 스타일 |
⚙️ 반올림의 종류(NumberFormatter().roundingMode)
소수점의 처리 케이스 소수점 처리 기능 .up 절댓값이 큰 쪽으로 반올림 .down 절댓값이 작은 쪽으로 반올림 .ceiling 소수점에 상관없이 반올림 .floor 소수점에 상관없이 반내림 .halfUp 반올림 .halfDown 반내림 .halfEven 짝수가 될 수 있도록 반올림 ✅ 숫자의 소수를 반올림
var x = 123.4567 var y = -123.4567 var numFor = NumberFormatter() numFor.roundingMode = .ceiling numFor.string(for: x) // "124" numFor.string(for: y) // "-123"
⚙️ 숫자 스타일의 종류(NumberFormatter().numberStyle)
숫자 스타일의 케이스 기능 .currency 달러($) 단위로 + 쉼표( , )를 사용하여 10진법 형식으로 표현 .decimal 쉼표( , )를 사용하여 10진법 형식으로 표현 .percent 퍼센트(%) 단위로 + 쉼표( , )를 사용하여 10진법 형식으로 표현 이 외에도 많은 종류의 스타일이 있습니다.
✅ 숫자 스타일을 변형
var x = 1234567 var y = -1234567 var numFor = NumberFormatter() numFor.numberStyle = .decimal numFor.string(for: x) // "1,234,567" numFor.string(for: y) // "-1,234,567"