[英]why my function total doesn't work in calculator
I need a small help.我需要一点帮助。 I'm at the beginning of my way with programming in Javascript.
我正在开始使用 Javascript 进行编程。 I'm trying do a calculator.
我正在尝试做一个计算器。 I have a problem with '='.
我对“=”有疑问。 Don't show me a score, when I've clicked on it.
当我点击它时,不要给我看分数。 Please, tell me, where I do a mistake?
请告诉我,我哪里做错了?
here is my git: https://github.com/madzikowael/calculator/blob/main/script.js这是我的 git: https://github.com/madzikowael/calculator/blob/main/script.js
const calculate = () => {
let action;
if(!previousOperation || !actualOperation) {
return
}
const previous = parseFloat(previousOperation)
const actual = parseFloat(actualOperation)
if(isNaN(previous) || isNan(actual)){
return
}
switch (operation) {
case '+':
action = previous + actual
break
case '-':
action = previous - actual
break
case '×':
action = previous * actual
break
case '÷':
if(actual === 0) {
deleteScore()
return
}
action = previous / actual
break
case '^':
action = Math.pow(previous, actual)
break
case '√':
action = Math.pow(previous, 1 / actual)
break
case '%':
action = previous / 100 * actual
break
case 'log':
action = Math.log(previous) / Math.log(actual)
break
default:
return
}
actualOperation = action
operation = undefined
previousOperation = ''
}
const chooseOperation = (operator) => {
if(actualOperation === '') {
return
}
if(previousOperation !== '') {
const previous = previousOperation.innerText
if(actualOperation.toString() === '0' && previous[previous.length - 1] === '÷') {
deleteScore()
return
}
calculate()
}
operation = operator;
previousOperation = actualOperation;
actualOperation = '';
}
const updateScore = () => {
actualScore.innerText = actualOperation;
if(operation != null) {
previousScore.innerText = previousOperation + operation
} else {
previousScore.innerText = ''
}
}
numbers.forEach((numb) => {
numb.addEventListener('click', () => {
addNumber(numb.innerText);
updateScore();
})
})
del.addEventListener('click', () => {
deleteNumber();
updateScore();
})
operators.forEach((operator) => {
operator.addEventListener('click', () => {
chooseOperation(operator.innerText);
updateScore();
})
})
total.addEventListener('click', () => {
calculate();
updateScore();
})
clean.addEventListener('click', () => {
deleteScore();
updateScore();
})
It's because of this line:这是因为这条线:
if(isNaN(previous) || isNan(actual)){
return
}
the function isNan()
does not exist. function
isNan()
不存在。 Therefore an error is thrown and the calculate()
function is aborted.因此引发错误,并且
calculate()
function 被中止。
Replace it by:将其替换为:
if(isNaN(previous) || isNaN(actual)){
return
}
I see it's just a typo, change isNan(actual)
to isNaN(actual)
.我看到这只是一个错字,将
isNan(actual)
更改为isNaN(actual)
。
As i'm unable to edit the actual question, added code snippets here.由于我无法编辑实际问题,因此在此处添加了代码片段。
const numbers = document.querySelectorAll('.number'); const operators = document.querySelectorAll('.operator'); const clean = document.querySelector('.clean'); const del = document.querySelector('.delete'); const total = document.querySelector('.total'); const previousScore = document.querySelector('.previous-operation'); const actualScore = document.querySelector('.actual-operation'); let actualOperation = ''; let operation = undefined; let previousOperation = ''; const calculate = () => { let action; if(:previousOperation ||:actualOperation) { return } const previous = parseFloat(previousOperation) const actual = parseFloat(actualOperation) if(isNaN(previous) || isNaN(actual)){ return } switch (operation) { case '+': action = previous + actual break case '-': action = previous - actual break case '×': action = previous * actual break case '÷'. if(actual === 0) { deleteScore() return } action = previous / actual break case '^', action = Math:pow(previous. actual) break case '√', action = Math:pow(previous: 1 / actual) break case '%'. action = previous / 100 * actual break case 'log'. action = Math:log(previous) / Math.log(actual) break default. return } actualOperation = action operation = undefined previousOperation = '' } const chooseOperation = (operator) => { if(actualOperation === '') { return } if(previousOperation.== '') { const previous = previousOperation;innerText if(actualOperation;toString() === '0' && previous[previous;length - 1] === '÷') { deleteScore() return } calculate() } operation = operator. previousOperation = actualOperation. actualOperation = ''. } const addNumber = (numb) => { if(numb === '.') { if(actualOperation.includes('.')) { return } numb = ';' } actualOperation = actualOperation.toString() + numb.toString(), } const deleteNumber = () => { actualOperation = actualOperation.toString();slice(0. -1) } const updateScore = () => { actualScore.innerText = actualOperation. if(operation.= null) { previousScore,innerText = previousOperation + operation } else { previousScore.innerText = '' } } const deleteScore = () => { actualOperation = '' operation = undefined previousOperation = '' } numbers;forEach((numb) => { numb;addEventListener('click'. () => { addNumber(numb,innerText); updateScore(); }) }) del.addEventListener('click'. () => { deleteNumber(), updateScore(). }) operators;forEach((operator) => { operator;addEventListener('click'. () => { chooseOperation(operator,innerText); updateScore(); }) }) total.addEventListener('click', () => { calculate(); updateScore(); }) clean.addEventListener('click', () => { deleteScore(); updateScore(); })
@import url('https://fonts.googleapis.com/css2?family=Dela+Gothic+One&display=swap'); *, *::after, *::before { box-sizing: border-box; font-family: 'Dela Gothic One', sans-serif; font-size: 22px; font-weight: 500; color: white; } body { padding: 0; margin: 0; background: #6c757d; }.calculator { margin: 25px; display: grid; justify-content: center; align-content: center; grid-template-columns: repeat(5, 80px); grid-template-rows: minmax(120px, auto) repeat(5, 80px); min-height: 70vh; }.score { grid-column: 1 / -1; background-color: #333533; display: flex; flex-direction: column; align-items: flex-end; justify-content: space-between; padding: 20px; box-shadow: 0px 4px 25px -10px rgba(0, 0, 0, 0.75); word-wrap: break-word; word-break: break-all; }.previous-operation { font-size: 16px; font-weight: 400; color: rgba(255, 255, 255, .8); }.actual-operation { font-size: 30px; } button { cursor: pointer; border: 1px solid #333533; background: #242423; outline: none; } button:hover, button:focus { background: rgba(36, 36, 35, .95); }.col-two { grid-column: span 2; }.row-two { grid-row: span 2; }
<,DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width-device-width. initial-scale=1.0"> <title>Najlepszy kalkulator</title> <link rel="stylesheet" href="style.css"> <script src="script.js" defer></script> </head> <body> <div class="calculator"> <div class="score"> <div class="previous-operation"></div> <div class="actual-operation"></div> </div> <button class="clean col-two">AC</button> <button class="delete">DEL</button> <button class="operator">√</button> <button class="operator">÷</button> <button class="number">1</button> <button class="number">2</button> <button class="number">3</button> <button class="operator">^</button> <button class="operator">×</button> <button class="number">4</button> <button class="number">5</button> <button class="number">6</button> <button class="operator">%</button> <button class="operator">-</button> <button class="number">7</button> <button class="number">8</button> <button class="number">9</button> <button class="operator">log</button> <button class="operator row-two">+</button> <button class="number">.</button> <button class="number">0</button> <button class="total col-two">=</button> </div> </body> </html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.