[C#] 계산기 만들기 2탄 (소수점)

2024. 2. 26. 11:11·Skills/C#

1탄에 이어서 오늘은 계산기의 소수점 계산을 만들어 보려고 한다.

 

 

using System;
using System.Windows.Forms;

namespace Calculator
{
    public partial class Form1 : Form
    {
        enum Operators
        {
            None,
            Add,
            Subtract,
            Multiply,
            Divide,
            Result,
        }

        // 초기값 설정
        Operators currentOperator = Operators.None;
        Boolean operatorChangeFlag = false;
        double firstOperand = 0;
        double secondOperand = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void ButtonResult_Click(object sender, EventArgs e)
        {
            // secondOperator
            if (display.Text.Contains("."))
            {
                secondOperand = Double.Parse(display.Text);
            }
            else
            {
                secondOperand = Int32.Parse(display.Text);
            }
            
            // currentOperator
            if (currentOperator == Operators.Add)
            {
                firstOperand += secondOperand;
                display.Text = firstOperand.ToString();
            }
            else if (currentOperator == Operators.Subtract)
            {
                firstOperand -= secondOperand;
                display.Text = firstOperand.ToString();
            }
            else if (currentOperator == Operators.Multiply)
            {
                firstOperand *= secondOperand;
                display.Text = firstOperand.ToString();
            }
            else if (currentOperator == Operators.Divide)
            {
                if (secondOperand == 0)
                {
                    display.Text = "Error";
                }
                else
                {
                    firstOperand /= secondOperand;
                    display.Text = firstOperand.ToString();
                }
            }
        }

        private void ButtonOperator_Click(object sender, EventArgs e)
        {
            if (display.Text.Contains("."))
            {
                firstOperand = Double.Parse(display.Text);
            }
            else
            {
                firstOperand = Int32.Parse(display.Text);
            }
            
            
            switch (((Button)sender).Name)
            {
                case "Add":
                    currentOperator = Operators.Add;
                    break;
                case "Subtract":
                    currentOperator = Operators.Subtract;
                    break;
                case "Multiply":
                    currentOperator = Operators.Multiply;
                    break;
                case "Divide":
                    currentOperator = Operators.Divide;
                    break;
            }
            
            operatorChangeFlag = true;
        }

        private void ButtonNumber_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += ((Button)sender).Text;
            if (strNumber.Contains("."))
            {
                double doubleNumber = Double.Parse(strNumber);
                display.Text = doubleNumber.ToString();
            }
            else
            {
                int intNumber = Int32.Parse(strNumber);
                display.Text = intNumber.ToString();
            }
        }

        private void ButtonAllClear_Click(object sender, EventArgs e)
        {
            firstOperand = 0;
            secondOperand = 0;
            currentOperator = Operators.None;
            display.Text = "0";
        }

        private void ButtonDot_Click(object sender, EventArgs e)
        {
            if (!display.Text.Contains("."))
            {
                display.Text += ".";
            }
        }
    }
}

 

위는 완성된 코드다.

 

 

 

하나씩 살펴보면,

 

int firstOperand = 0;

int secondOperand = 0;을

 

double firstOperand = 0;

double secondOperand = 0;으로 바꿔주었다.

 

int는 double을 담을 수 없기에

double로 int도 담고 double도 담기 위해서다.

 

 

 

 

그 다음 ButtonResult_Click()에서

secondOperand = Int32.Parse(display.Text); 부분을

display.Text.Contains(".")을 확인해서

소수점이 찍혔다면 Double.Parse(display.Text) (문자열을 실수로 변환)

소수점이 없다면 Int32.Parse(display.Text) (문자열을 정수로 변환) 를 해준다.

 

 

 

 

ButtonOperator_Click()도 매한가지다.

firstOperand = Int32.Parse(display.Text); 부분을

display.Text.Contains(".")을 확인해서

소수점이 찍혔다면 Double.Parse(display.Text)

소수점이 없다면 Int32.Parse(display.Text)를 해준다.

 

 

 

 

ButtonNumber_Click()에서도

strNumber를 확인해서

double, int를 구분해준다.

strNumber를 .Parse()하고 다시 .ToString()으로 보여주는 이유는

필요없는 0 값을 없애기 위함이다.

예를 들어 6을 입력한다고 했을 때

06으로는 입력되지 않도록 만들기 위함이다.

 

 

 

소수점까지 완성!!

'Skills > C#' 카테고리의 다른 글

[C#] 계산기 만들기 1탄 (리팩토링)  (0) 2024.02.26
C# 시작하기  (0) 2024.02.22
C# 코딩규칙 (C# Coding Standards and Best Practices)  (0) 2024.01.17
'Skills/C#' 카테고리의 다른 글
  • [C#] 계산기 만들기 1탄 (리팩토링)
  • C# 시작하기
  • C# 코딩규칙 (C# Coding Standards and Best Practices)
개발자 윤구나
개발자 윤구나
개발 공부를 하고 있습니다. Let's go!
  • 개발자 윤구나
    이것은 무엇?????
    개발자 윤구나
    • 분류 전체보기
      • Skills
        • Java
        • Database
        • Flutter, Dart
        • JavaScript
        • React
        • HTML5
        • CSS3, SCSS
        • PHP
        • C#
        • Unity
        • Algorithm
        • GIT·GitHub
        • 그 외
      • Book Review
      • IT NEWS
      • 설계
      • 자기 계발
  • 블로그 메뉴

    • 홈
    • 방명록
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
개발자 윤구나
[C#] 계산기 만들기 2탄 (소수점)
상단으로

티스토리툴바