[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.######## 이렇게 형식을 맞춰줬다.
내일은 나머지 수식들(제곱, 제곱근 등을 처리해줄 생각이다.)
반응형
'[C#] > [C# 윈폼] 혼자해보는 계산기 만들기' 카테고리의 다른 글
[C#] 제곱, 제곱근, 역수 수식 표시 & 계산기 정밀도 높이기(부동 소수점 계산 오류) (0) | 2024.01.11 |
---|---|
[C#] 소수점 처리 에러 (1) | 2024.01.10 |
[C#] KeyEvent (0) | 2024.01.08 |
[C#] 윈도우폼 계산기 만들기(~ing) (1) | 2024.01.05 |
[C#] 계산기 시작과 Function (0) | 2024.01.01 |