Notice
Recent Posts
Recent Comments
Link
투케이2K
72. (swift/xcode) [유틸 파일] Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시 - 소수점 제한 출력 본문
Swift
72. (swift/xcode) [유틸 파일] Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시 - 소수점 제한 출력
투케이2K 2022. 4. 6. 10:37[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[소스 코드]
// MARK: - [Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]
func doubleCutLength(double: Double, length: Int) -> String {
/*
// -----------------------------------------
[doubleCutLength 메소드 설명]
// -----------------------------------------
1. Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시
// -----------------------------------------
2. 호출 방법 :
C_Util().doubleCutLength(double: 123.4567, length: 2)
C_Util().doubleCutLength(double: -123.4567, length: 2)
// -----------------------------------------
3. 리턴 반환 : 123.45 : 소수점 특정 자릿수 기준 제한 문자열 데이터
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [인풋 데이터 널 체크 수행 실시]
if double != nil
&& length != nil
&& length >= 0 {
// [인풋으로 들어온 double 데이터 확인 실시]
var strData = String(describing: double)
var strArray = Array(strData)
// [마이너스 값 체크 여부 플래스 정의]
var checkMinus = false
// [마이너스 데이터 값 체크 실시]
if strArray[0] == "-" {
checkMinus = true // [마이너스 시작 플래스 설정]
}
// [마이너스로 시작하는 경우]
if checkMinus == true {
strArray.remove(at: 0)
}
// [배열 데이터 값을 string 변환 실시]
strData = ""
for j in stride(from: 0, through: strArray.count-1, by: 1) {
strData = strData + strArray[j].description
}
// [for 문을 돌면서 . 점 개수 카운트 및 위치 확인 실시]
var dotCount = 0
var dotLocation = 0
var dotLength = 0
for i in stride(from: 0, through: strArray.count-1, by: 1) {
if strArray[i] == "." {
dotCount = dotCount + 1 // [. 점 개수 카운트 증가]
dotLocation = i // [점 위치값 지정 실시]
dotLength = strArray.count - (i + 1) // [소수점 이하 자리수 카운트 개수 확인]
}
}
/*
print("")
print("====================================")
print("[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]")
print("-------------------------------")
print("checkMinus [마이너스 값 여부] :: \(checkMinus)")
print("-------------------------------")
print("dotCount [점 개수] :: \(dotCount)")
print("-------------------------------")
print("dotLocation [점 위치] :: \(dotLocation)")
print("-------------------------------")
print("formatStrData [포맷 데이터] :: \(strData)")
print("====================================")
print("")
// */
// [점 개수 값을 확인해서 포맷 수행 실시]
if dotCount == 1 {
// [위치 값 재조절 실시]
dotLocation = dotLocation + length
// [NumberFomatter 을 사용해서 특정 자릿수 기준으로 포맷 실시]
let numberFomatter = NumberFormatter() // NumberFormatter 객체 생성
numberFomatter.roundingMode = .floor // 특정 자릿수 기준으로 버림 설정
numberFomatter.maximumSignificantDigits = dotLocation // 자르기를 원하는 자릿수 지정 실시
// [리턴 결과 변수에 삽입 실시]
returnData = numberFomatter.string(for: Double(strData) ?? 0)!
if checkMinus == true { // 마이너스 기호인 경우 최종 부호 추가
returnData = "-" + returnData
}
// [원본 데이터보다 더 많은 수 자리를 지정한 경우 0 으로 채움]
/*
print("")
print("====================================")
print("[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]")
print("-------------------------------")
print("소수점 이하 개수 :: \(dotLength)")
print("-------------------------------")
print("자르려는 소수점 자릿수 :: \(length)")
print("====================================")
print("")
// */
if length > dotLength {
let zeroCount = length - dotLength
for k in stride(from: 0, through: zeroCount-1, by: 1){
returnData = returnData + "0"
}
}
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]")
print("-------------------------------")
print("input [double] :: \(double)")
print("-------------------------------")
print("input [length] :: \(length)")
print("-------------------------------")
print("return [string] :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
[결과 출력]
반응형
'Swift' 카테고리의 다른 글
Comments