본문 바로가기
프로그래밍/유니티

C# 문자열 보간법 $의 활용, 소수점 올림/반올림/내림

by 넋두리- 2022. 4. 3.

메서드의 수행 단계에 따른 프로퍼티 상태 추적을 위해서 디버그 로그를 심어본 경험이 많을 것이다.

C#에서 사용되는 문자열 다루기를 한 번 알아보자.

 

들어가기 앞서, 글쓴이는 유니티를 이용해서 주로 개발해서 예시는 모두 유니티에서 사용되는 UnityEngine.Debug.Log를 사용하고 있다. 유니티 엔진을 사용하지 않는다면 System.Console.WriteLine을 이용해서 로그를 출력해주면 된다.

 

내 정보를 출력해주는 MyInfo라는 클래스가 있다고 하자.

PrintMyInfo 함수 호출을 통해 다양한 로그를 출력해보자.

 

1. 예전 방식 - string.Format 함수를 이용

using UnityEngine;

public class MyInfo : MonoBehaviour
{
    void Start()
    {
        PrintMyInfo();
    }

    void PrintMyInfo()
    {
        string nickName = "twosouls";
        float height = 180.4172f;
        string phone_number = "010-0000-0000";

        Debug.Log(string.Format("Nick Name : {0}, Height : {1}, Phone Number : {2}", nickName, height, phone_number));
    }
}

 

string.Format 함수에서 문자열 뒤의 가변 인자들과 순서대로 매칭이 된다. {0} = nickName, {1} = height, {2} = phone_number로 매칭이 되는 것이다. 매칭을 하기 위해서 문자 간의 거리가 멀어서 불편함이 있다.

 

2. 개선된 방식 - $ 문자열 보간 사용

using UnityEngine;

public class MyInfo : MonoBehaviour
{
    void Start()
    {
        PrintMyInfo();
    }

    void PrintMyInfo()
    {
        string nickName = "twosouls";
        float height = 180.4252f;
        string phone_number = "010-0000-0000";

        Debug.Log($"Nick Name : {nickName}, Height : {height:0.00}, Phone Number : {phone_number}");
        Debug.Log($"Ceil : {(Mathf.Ceil(height * 100.0f)) / 100.0f}");        
        Debug.Log($"Round : {(Mathf.Round(height * 100.0f)) / 100.0f}");
        Debug.Log($"Floor : {(Mathf.Floor(height * 100.0f)) / 100.0f}");
    }
}

 

해당 문법을 알고 난 뒤에 개인적으로 매우 선호하는 문자열 보간 방식이다. 문자열 앞에 $를 붙여주고, 변수나 상수를 사용할 때 { } 괄호 사이에 변수나 상수를 넣어주면 된다. 수식도 넣을 수 있다.

 

소수점의 올림, 반올림, 내림에 대해서도 같이 알아보자.

 

Mathf.Ceil = 올림,

Mathf.Round = 반올림,

Mathf.Floor = 내림

 

소수점 첫번째 자리에서 수행하고 싶으면 함수를 그대로 호출하면 되지만, 소수점 둘째 이상부터 올림, 반올림, 내림 등을 수행하고 싶으면 (자리 수-1) 만큼 10을 반복해서 곱해주고 함수를 호출하고 결과 값에서 곱한 만큼 다시 나눠주면 된다. 이해가 안되면 아래의 예시를 보자.

 

둘째 자리에서 올림 수행 => (Mathf.Ceil(height * 10.0f)) / 10.0f => 결과값은 소수점 첫째짜리까지 

셋째 자리에서 올림 수행 => (Mathf.Ceil(height * 100.0f)) / 100.0f => 결과값은 소수점 둘째짜리까지 

...

 

예문에 {height:0.00}로 되어있는 것을 보신 분이 있을 것이다. 해당 문법처럼 할 때에는 셋째 자리에서 반올림해서 둘째 자리까지 표시해달라는 의미다. 이처럼 간단하게 처리할 수도 있다.

댓글