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 |