• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

빼기 마이너스 / 연속계산 질문있습니다.

24.04.01 18:47 작성 조회수 91

0

let num1;
        let num2;
        let op;
        let cal;
        let minus = 1;
        
        function onClickNumber(e) {
            if(!op) {
                $result.value += e.target.textContent * minus;
                num1 = parseInt($result.value);
                minus = 1;
            } else {
                $result.value += e.target.textContent * minus;
                num2 = parseInt($result.value);
                minsu = 1;
            }
        }

        function operator(e) {
            if (num2) {
                switch(op) {
                    case '+' :
                        $result.value = num1 + num2;
                        break;
                    case '-' :
                        $result.value = num1 - num2;
                        break;
                    case 'x' :
                        $result.value = num1 * num2;
                        break;
                    case '/' :
                        $result.value = num1 / num2;
                        break;
                }
                num1 = $result.value;
                num2 = '';
                minus = 1;
            }
            if (num1 && !op) {
                $operator.value = e.target.textContent;
                op = $operator.value;
                $result.value = '';
            } 
            if (!num1 && e.target.textContent === '-') {
                return minus = -1;
            }
            if (op && !num2 && e.target.textContent === '-') {
                return minus = -1;
            }
        }

마이너스 구현은 됐는데

빼기 할 때, 마이너스가 같이 나와요. 조건을 추가해서 더 넣어봤는데 그러면 다른 기능이 작동하질 않네요...

연속계산은 잘 되다가 마이너스 구현 이후로 작동이 안 되네요.

이 강좌 이후에 해설 있나요?

답변 1

답변을 작성해보세요.

0

minsu = 1;

일단 이건 오타이고요.

빼기할 때 마이너스가 같이나온다는게 결과창에서 같이 나온다는 의미인가요?

정확한 순서와 결과를 알려주세요.

-를 눌렀을 때 연산자 창에 -가 뜨고 입력창에도 -가 붙어서 출력됩니다.

3을 누르고 다음에 마이너스를 누른 상황이신건가요? 코드상으로는 그 경우로는 안 나오는 것 같긴 한데요.

넵 맞습니다. 저 위 코드에 문제가 없다면 다른 부분에 오류가 있나 보네요.. 다른 부분 고쳐보겠습니다. 그리고 음수 접근법(minus 변수 추가)은 괜찮은 방법인지 궁금합니다.

$result.value를 바꿀 때만 결과창 칸이 바뀌어야 하는데 이상해서요.

minus 변수 추가는 괜찮은데 $result.value에 넣을 때 마지막에 * minus를 하는 대신 앞에 -를 붙일지 말지만 minus로 결정하는 게 낫지 않나 싶습니다.

음수 변환 해결했습니다!

근데 연속 계산이 안 되네요..

if (num1 && !op) { $operator.value = e.target.textContent; op = $operator.value; $result.value = ''; }

&& !op 이 조건 때문에 넘어가지 않네요. 없애면 연속 계산은 되는데 두번째 값 음수 적용이 안 되고 붙이면 두번째 값 음수 적용은 되지만 연속 계산이 안 되는 루프에 갖혔습니다..

if (num2) 문에 return 값을 넣어서 minus = 2라는 조건도 만들어 봤는데 이건 연산자를 두번 클릭을 해야 작동돼서 애매하네요..

다음 링크는 마이너스 부분은 없는 연속계산 코드입니다. 참고해보세요.

https://github.com/ZeroCho/es2024-webgame/blob/main/calculator-self.html

연속계산의 핵심은 onClickOperator에서 numTwo가 있을때 연산자를 클릭한 경우 calculate를 호출하는 겁니다.