0.이하 처리
This commit is contained in:
parent
ab44be17fd
commit
6fdb0df00c
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user