[C#] 자릿수 표시 & 수식 표시 기능 추가

2024. 1. 9. 15:43[C#]/[C# 윈폼] 혼자해보는 계산기 만들기

자릿 수 표시와 수식 표시 기능을 구현하고 싶었다.

 

1. 자릿 수 표시(천의 자리 ,)

 

 

 

1) string

private void FormatNumber()
{
    double parsedNumber;
    if (double.TryParse(NumScreen.Text, out parsedNumber)) //Screen에 표시된 string 값을 double로 변환하고, 이를 포맷해준다.
    {
        NumScreen.Text = parsedNumber.ToString("#,###");
    }
}

 

 //숫자 입력 처리
 public void SetNum(string num)
 {
     System.Diagnostics.Debug.WriteLine(isNewNum);

     if (isNewNum)
     {
         NumScreen.Text = num;
         isNewNum = false;
     }
     else if(NumScreen.Text == "0")
     {
         NumScreen.Text = num;
     }
     else
     {
         NumScreen.Text += num;
     }

     FormatNumber(); //추가

 }

 

2) int

//int형 같은 경우에는 ToString에 #,###으로 포맷해줄 수 있다.
NumScreen.Text = Result.ToString("#,###");

 

 

2. 수식 표시

수식 표시는 라벨을 두개로 나눠서 진행하느라 시간이 조금 걸렸다.

로직이 조금씩 꼬이는 바람에 변화에 따라 신경써줘야할 부분이 많았다.

 

 

우선 수식 표시를 해주는 Function을 만들고

 //수식 표시
 private void SetExpression(string expression)
 {
     if (expression == "") {
         expressionScreen.Text = Result.ToString();
     }
     else
     {
         expressionScreen.Text += expression; // 수식을 표시하는 Label에 사용자 입력값 추가
     }

 }

 

사칙 연산 하는 부분에 수식 관련 코드와 조건을 추가해줬다.

        //사칙 연산 처리
        private void OptBtn_Click(object sender, EventArgs e)
        {

            double num = double.Parse(NumScreen.Text);

            if (Opt != Operators.None && !isNewNum)
            {
                if (Opt == Operators.Add)
                    Result += num;
                else if (Opt == Operators.Sub)
                    Result -= num;
                else if (Opt == Operators.Multi)
                    Result *= num;
                else if (Opt == Operators.Div && num != 0)
                    Result /= num;
            }
            else
            {
                Result = num;
            }

            NumScreen.Text = Result.ToString("#,###");
            isNewNum = true;

            Button optButton = (Button)sender;
            string opt = optButton.Text;

            if (opt == "=") // =일때 조건 추가
            {
                SetExpression(num + " " + opt);
                isNewNum = true;
            }
            else
            {
                if(isNewNum = true) //isNewNum이 true이면 수식 라벨 초기화
                {
                    expressionScreen.Text = "";
                }
                SetExpression(" " + NumScreen.Text + " " + opt + " "); // "+" 버튼 클릭 시 수식 라벨에 연산자 추가

                if (opt == "+")
                    Opt = Operators.Add;
                else if (opt == "-")
                    Opt = Operators.Sub;
                else if (opt == "x" || opt == "*")
                    Opt = Operators.Multi;
                else if (opt == "÷")
                    Opt = Operators.Div;
                else
                    Opt = Operators.None;
                    equalsBtn.Focus();

            }
           
        }

 

 

+ 추가 버그 - 소수점 입력이 안되는 문제

갑자기 코드를 고치고 잘되나 이것저것 만지던 중 소수점 이후 숫자가 입력이 안되는 문제가 발생했다.

이것은 내가 천의 자리 숫자 콤마 작업을 할 때 #,###으로 했는데 소수점까지 하려면 #,###.####이런 식으로 바꿔줘야 소수점도 인식한다. 

그리고 일의 자리에 숫자가 없으면 0.xxx 이런 식으로 띄어주고 싶어서 #,##0.######## 이렇게 형식을 맞춰줬다.

 

 

 

내일은 나머지 수식들(제곱, 제곱근 등을 처리해줄 생각이다.)

반응형