투케이2K

119. (kotlin/코틀린) [유틸 파일] doubleCutLength : Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 본문

Kotlin

119. (kotlin/코틀린) [유틸 파일] doubleCutLength : Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기

투케이2K 2022. 12. 21. 06:37

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

        // TODO [SEARCH FAST] : [RETURN] doubleCutLength : Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시 [반올림 없음]
        fun doubleCutLength(doubleData: Double, length: Int) : String {

            /**
             * // -----------------------------------------
             * [doubleCutLength 메소드 설명]
             * // -----------------------------------------
             * 1. Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시 [반올림 없음]
             * // -----------------------------------------
             * 2. 호출 방식 :
             *   C_Util.doubleCutLength(123.4567, 2)
             *   C_Util.doubleCutLength(-123.4567, 2)
             * // -----------------------------------------
             * 3. 리턴 데이터 : 123.45 : 소수점 특정 자릿수 기준 제한 문자열 데이터
             * // -----------------------------------------
             * */


            // [리턴 변수 선언]
            var result = ""


            // [인풋 데이터 체크 수행 실시]
            if (length >= 0
                && C_Util.stringNotNull(doubleData.toString()) == true){ // [0 자릿수 이상 들어온 경우 / 널이 아닌 경우]

                try {

                    // [필요 변수 선언 실시]
                    var dotCount = 0 // 점 개수
                    var dotLocation = 0 // 점 위치
                    var dotLength = 0 // 소수점 이하 자릿수 기준

                    // [for 문을 돌면서 데이터 확인 실시]
                    val strData = doubleData.toString()
                    for (i in 0 .. strData.length-1 step(1)) {
                        if (strData[i] == '.') { // 문자열 특정 자릿수가 점 (.) 인 경우
                            dotCount = dotCount + 1 // 카운트 증가
                            dotLocation = i // 위치 지정
                            val subString = strData.substring(dotLocation + 1, strData.length)
                            dotLength = subString.length // 소수점 이하 자릿수 확인
                        }
                    }

                    /*
                    Log.i("---","---")
                    Log.d("//===========//","================================================")
                    Log.i("","\n"+"[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]")
                    Log.i("","\n"+"[dotCount [소수점 개수] :: "+dotCount.toString()+"]")
                    Log.i("","\n"+"[dotLocation [소수점 위치] :: "+dotLocation.toString()+"]")
                    Log.i("","\n"+"[dotLength [소수점 이하 자릿수] :: "+dotLength.toString()+"]")
                    Log.d("//===========//","================================================")
                    Log.i("---","---");
                    // */

                    // [정상적으로 소수점이 포함된 경우]
                    if (dotCount == 1) {
                        if (length > dotLength) { // [원본 데이터 보다 인풋값이 큰 경우 >> 0 값으로 채움]
                            result = strData.substring(0, strData.length)
                            val zeroCount = length - dotLength
                            for (j in 0 .. zeroCount-1 step(1)) {
                                result = result + "0"
                            }
                        } else {
                            result = if (length == 0) {
                                strData.substring(0, dotLocation + length)
                            } else {
                                strData.substring(0, dotLocation + length + 1)
                            }
                        }
                    }

                }
                catch (e: Exception) {
                    e.printStackTrace()
                }

            }


            // [로그 출력 실시]
            ///*
            Log.i("---","---")
            Log.d("//===========//","================================================")
            Log.i("","\n"+"[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]")
            Log.i("","\n"+"[INPUT [double] :: "+doubleData.toString()+"]")
            Log.i("","\n"+"[INPUT [length] :: "+length.toString()+"]")
            Log.i("","\n"+"[RETURN [string] :: "+result+"]")
            Log.d("//===========//","================================================")
            Log.i("---","---")
            // */


            // [리턴 반환 실시]
            return result

        }
 

[결과 출력]


반응형
Comments