Svelte code (@3.46.2)
<script> let currentOperand = null; let previousOperand = null; let operation = null; let overwrite = false; function addDigit(digit) { if (overwrite) { currentOperand = digit; overwrite = false; return; } if (digit === "0" && currentOperand === "0") return; if (digit === "." && currentOperand && currentOperand.includes(".")) return; currentOperand = `${currentOperand || ""}${digit}`; } function chooseOperation(op) { if (currentOperand == null && previousOperand == null) return; if (previousOperand == null) { operation = op; previousOperand = currentOperand; currentOperand = null; return; } const prev = parseFloat(previousOperand); const current = parseFloat(currentOperand); let computation = ""; switch (operation) { case "+": computation = prev + current; break; case "-": computation = prev - current; break; case "*": computation = prev * current; break; case "÷": computation = prev / current; break; } previousOperand = computation.toString(); operation = op; currentOperand = null; } function evaluate() { if (operation == null || currentOperand == null || previousOperand == null) return; const prev = parseFloat(previousOperand); const current = parseFloat(currentOperand); if (isNaN(prev) || isNaN(current)) return; let computation = ""; switch (operation) { case "+": computation = prev + current; break; case "-": computation = prev - current; break; case "*": computation = prev * current; break; case "÷": computation = prev / current; break; } currentOperand = computation.toString(); operation = null; previousOperand = null; overwrite = true; } function deleteDigit() { if (overwrite) { overwrite = false; currentOperand = null; return; } if (currentOperand == null) return; if (currentOperand.length === 1) { currentOperand = null; return; } currentOperand = currentOperand.slice(0, -1); } function clear() { currentOperand = null; previousOperand = null; operation = null; overwrite = false; } $: displayCurrent = currentOperand || ''; $: displayPrevious = (previousOperand || '') + (operation ? ' ' + operation : ''); </script> <div class="calculator-grid"> <div class="output"> <div class="previous-operand">{displayPrevious}</div> <div class="current-operand">{displayCurrent}</div> </div> <button class="span-two" on:click={clear}>AC</button> <button on:click={deleteDigit}>DEL</button> <button on:click={() => chooseOperation('÷')}>÷</button> <button on:click={() => addDigit('1')}>1</button> <button on:click={() => addDigit('2')}>2</button> <button on:click={() => addDigit('3')}>3</button> <button on:click={() => chooseOperation('*')}>*</button> <button on:click={() => addDigit('4')}>4</button> <button on:click={() => addDigit('5')}>5</button> <button on:click={() => addDigit('6')}>6</button> <button on:click={() => chooseOperation('+')}>+</button> <button on:click={() => addDigit('7')}>7</button> <button on:click={() => addDigit('8')}>8</button> <button on:click={() => addDigit('9')}>9</button> <button on:click={() => chooseOperation('-')}>-</button> <button on:click={() => addDigit('.')}>.</button> <button on:click={() => addDigit('0')}>0</button> <button class="span-two" on:click={() => evaluate()}>=</button> </div>
Compiled running javascript app
Compiled javascript