뭘 원하냐 하면 계산기의 % 기능인데여
일단 50 + 25 % = 62.5 졈 (윈도우의 계산기로 해본결과)
그런데 저는 12.5 가 나오내염
50 + 25 %까지는 12.5가 나오더군여 윈계산기도 그런데 =을
누르니깐 62.5가 나와야 하는데 저는 12.5가 나오내염
% 를 계산하는법을 몰라서
걍 변수1 = 변수1 * 텍스트박스 / 100
으로 했거든여
제 전체 소스입니당 아래는 주석두 있으니 함 봐주세염
Option Explicit
Dim AddCheck As Integer '체크
Dim first As Variant
'위는 처음수 가 저장될변수(각각따로 변수를 주어도 되지만 복잡해지므로 varint형으로 통일했다.)
Dim MemBuf As Variant '메모리
Dim im As Integer '임시결과값
Sub yun(gap As Integer) '내부 함수
If gap = 5 Then im = 5
Select Case im
Case 1: first = first + Val(txt1.Text) '+ 더하기
Case 2: first = first - Val(txt1.Text)
Case 3 '* 곱하기
If Val(txt1.Text) <> 0 Then '영으로 곱하는거 방지
first = first * Val(txt1.Text)
End If
Case 4 ' 나누기
If Val(txt1.Text) <> 0 And first <> 0 Then '영을 나누거나 영으로 나누는거 방지
first = first / Val(txt1.Text)
End If
Case 5 ' 퍼센트
If first <> 0 And Val(txt1.Text) <> 0 Then '나누기와 동일(퍼센트는 아직 답이 안나오니 참고)
first = first * Val(txt1.Text) / 100
End If
gap = 0
Case 0
first = Val(txt1.Text)
End Select
im = gap '최종 계산 방식 저장
txt1.Text = Trim(Str(first)) '계산 결과 보이기
AddCheck = False '새로운 값을 입력 받을 준비
End Sub
Private Sub cmdKey_Click(Index As Integer) '연산식 클릭시
Select Case Index '버튼
Case 0 '00 백단위 입력
If AddCheck Then
If Val(txt1.Text) <> 0 Then txt1.Text = txt1.Text + "00"
End If
Case 1
If InStr(txt1.Text, ".") = 0 Then
If AddCheck Then
txt1.Text = txt1.Text + "."
Else
AddCheck = True
txt1.Text = "0."
End If
End If
Case 2: yun (1) '+ 더하기
Case 3: yun (2) '- 빼기
Case 4: yun (3) '* 곱하기
Case 5: yun (4) '/ 나누기
Case 6 'Back 백스페이스
If AddCheck Then
If Len(txt1.Text) = 1 Then
txt1.Text = "0"
ElseIf Len(txt1.Text) = InStr(txt1.Text, "") Then
txt1.Text = "" '에러발생을 방지함
Else
txt1.Text = Left(txt1.Text, Len(txt1.Text) - 1)
End If
End If
Case 7: yun (5) '% 퍼센트
Case 8 '+/- 부호
If Val(txt1.Text) <> 0 Then
If Left(txt1.Text, 1) = "-" Then
txt1.Text = Right(txt1.Text, Len(txt1.Text) - 1)
Else
txt1.Text = "-" + txt1.Text
End If
End If
Case 9: yun (0) '= 계산실행
Case 10: txt1.Text = "0" 'CE 최종계산 취소
Case 11 'C 전체계산취소
txt1.Text = "0"
first = 0
Case 12: MemBuf = MemBuf + Val(txt1.Text) 'M+ 메모리에 더하기
Case 13: MemBuf = MemBuf - Val(txt1.Text) 'M- 메모리에서 빼기
Case 14: txt1.Text = Trim(Str(MemBuf)) 'MR 메모리 내용 보이기
Case 15: MemBuf = 0 'MC 메모리 내용 지우기
End Select
txt1.SetFocus '포커스지정
End Sub
Private Sub cmdNum_Click(Index As Integer) '번호버튼클릭
If AddCheck Then '숫자 입력시 현재 상태가 입력중 상황이면
If txt1.Text = "0" Then txt1.Text = ""
txt1.Text = txt1.Text + cmdNum(Index).Caption
Else '새로운 입력이 시작되었을 경우
txt1.Text = cmdNum(Index).Caption
AddCheck = True
End If
txt1.SetFocus
End Sub
Private Sub Form_Load()
'폼을 화면 가운데 위치
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
AddCheck = True ' 현재 입력중 상황으로 한다
End Sub
Private Sub txt1_KeyPress(A As Integer) '키보드작성용
Dim No As Integer
Debug.Print A '아스키코드 검사용(이렇게 하면 키에데한 아스키코드를 알수 있다.)
Select Case A '키보드 입력을 감지
Case 48 To 57 ' 0~9 까지 번호(아스키)
No = A - 48: cmdNum_Click (No)
Case 46: cmdKey_Click (1) '.
Case 43: cmdKey_Click (2) '+
Case 45: cmdKey_Click (3) '-
Case 42: cmdKey_Click (4) ' *
Case 47: cmdKey_Click (5) ' /
Case 8: cmdKey_Click (6) '백스페이스
Case 37: cmdKey_Click (7) ' %
Case 62: cmdKey_Click (8) ' +-
Case 61: cmdKey_Click (9) ' =
Case 26: cmdKey_Click (10) 'CE 단축키 - Ctrl+Z
Case 24: cmdKey_Click (11) 'C 단축키 - Ctrl+X
End Select
A = 0
End Sub