From 6fdb0df00cb1d95094524b051106404a81023292 Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 22 Dec 2025 17:31:45 +0900 Subject: [PATCH] =?UTF-8?q?0.=EC=9D=B4=ED=95=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/input/CalcInput.jsx | 45 ++++++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/src/components/common/input/CalcInput.jsx b/src/components/common/input/CalcInput.jsx index 17af010e..14118b87 100644 --- a/src/components/common/input/CalcInput.jsx +++ b/src/components/common/input/CalcInput.jsx @@ -50,26 +50,42 @@ export const CalculatorInput = forwardRef( // 소수점 이하 2자리 제한 로직 추가 const shouldPreventInput = (value) => { - const decimalParts = (value || '').split('.') + if (!value) return false + const decimalParts = value.toString().split('.') return decimalParts.length > 1 && decimalParts[1].length >= 2 } + // 숫자 추가 함수 + const appendNumber = (current, num) => { + // 현재 값이 0이고 소수점이 없을 때 0이 아닌 숫자를 입력하면 대체 + if (current === '0' && num !== '.' && !current.includes('.')) { + return num.toString() + } + // 0. 다음에 0을 입력하는 경우 허용 + if (current === '0' && num === '0') { + return '0.' + } + return current + num + } + if (hasOperation) { // 연산자 이후 숫자 입력 시 - if (calculator.currentOperand === '0' || calculator.shouldResetDisplay) { + if (calculator.shouldResetDisplay) { calculator.currentOperand = num.toString() calculator.shouldResetDisplay = false - }else if (!shouldPreventInput(calculator.currentOperand)) { //소수점 이하2자리 - calculator.currentOperand = (calculator.currentOperand || '') + num + } else if (num === '.') { + if (!calculator.currentOperand.includes('.')) { + calculator.currentOperand = calculator.currentOperand || '0' + '.' + } + } else if (!shouldPreventInput(calculator.currentOperand)) { + calculator.currentOperand = appendNumber(calculator.currentOperand || '0', num) } - // else { - // calculator.currentOperand = (calculator.currentOperand || '') + num - // } + newDisplayValue = calculator.previousOperand + calculator.operation + calculator.currentOperand setDisplayValue(newDisplayValue) } else { // 첫 번째 숫자 입력 시 - if (displayValue === '0' || calculator.shouldResetDisplay) { + if (calculator.shouldResetDisplay) { calculator.currentOperand = num.toString() calculator.shouldResetDisplay = false newDisplayValue = calculator.currentOperand @@ -77,8 +93,17 @@ export const CalculatorInput = forwardRef( if (!hasOperation) { onChange(calculator.currentOperand) } - } else if (!shouldPreventInput(calculator.currentOperand)) { //소수점 이하2자리 - calculator.currentOperand = (calculator.currentOperand || '') + num + } else if (num === '.') { + if (!calculator.currentOperand.includes('.')) { + calculator.currentOperand = (calculator.currentOperand || '0') + '.' + newDisplayValue = calculator.currentOperand + setDisplayValue(newDisplayValue) + if (!hasOperation) { + onChange(newDisplayValue) + } + } + } else if (!shouldPreventInput(calculator.currentOperand)) { + calculator.currentOperand = appendNumber(calculator.currentOperand || '0', num) newDisplayValue = calculator.currentOperand setDisplayValue(newDisplayValue) if (!hasOperation) {