返回代码库
在线计算器
zh工具计算器ReactUI设计
提示语
一个设计精美的在线计算器哈
生成结果
import React, { useState } from 'react'; export default function App() { const [display, setDisplay] = useState('0'); const [operator, setOperator] = useState(null); const [previousValue, setPreviousValue] = useState(null); const [waitingForOperand, setWaitingForOperand] = useState(false); const inputDigit = (digit) => { if (waitingForOperand) { setDisplay(String(digit)); setWaitingForOperand(false); } else { setDisplay(display === '0' ? String(digit) : display + digit); } }; const inputDecimal = () => { if (waitingForOperand) { setDisplay('0.'); setWaitingForOperand(false); return; } if (display.indexOf('.') === -1) { setDisplay(display + '.'); } }; const clearAll = () => { setDisplay('0'); setOperator(null); setPreviousValue(null); setWaitingForOperand(false); }; const toggleSign = () => { const newValue = parseFloat(display) * -1; setDisplay(String(newValue)); }; const inputPercent = () => { const value = parseFloat(display); setDisplay(String(value / 100)); }; const performOperation = (nextOperator) => { const inputValue = parseFloat(display); if (previousValue == null) { setPreviousValue(inputValue); } else if (operator) { const currentValue = previousValue || 0; const newValue = calculate(currentValue, inputValue, operator); setDisplay(String(newValue)); setPreviousValue(newValue); } setWaitingForOperand(true); setOperator(nextOperator); }; const calculate = (a, b, op) => { switch (op) { case '+': return a + b; case '-': return a - b; case '×': return a * b; case '÷': return a / b; default: return b; } }; const handleEqual = () => { const inputValue = parseFloat(display); if (previousValue != null && operator) { const newValue = calculate(previousValue, inputValue, operator); setDisplay(String(newValue)); setPreviousValue(null); setOperator(null); setWaitingForOperand(true); } }; return ( <div className='calculator'> <div className='calculator-display'>{display}</div> <div className='calculator-keypad'> <button className='key key-clear' onClick={clearAll}>C</button> <button className='key key-sign' onClick={toggleSign}>±</button> <button className='key key-percent' onClick={inputPercent}>%</button> <button className='key key-operator' onClick={() => performOperation('÷')}>÷</button> <button className='key key-number' onClick={() => inputDigit(7)}>7</button> <button className='key key-number' onClick={() => inputDigit(8)}>8</button> <button className='key key-number' onClick={() => inputDigit(9)}>9</button> <button className='key key-operator' onClick={() => performOperation('×')}>×</button> <button className='key key-number' onClick={() => inputDigit(4)}>4</button> <button className='key key-number' onClick={() => inputDigit(5)}>5</button> <button className='key key-number' onClick={() => inputDigit(6)}>6</button> <button className='key key-operator' onClick={() => performOperation('-')}>-</button> <button className='key key-number' onClick={() => inputDigit(1)}>1</button> <button className='key key-number' onClick={() => inputDigit(2)}>2</button> <button className='key key-number' onClick={() => inputDigit(3)}>3</button> <button className='key key-operator' onClick={() => performOperation('+')}>+</button> <button className='key key-number key-zero' onClick={() => inputDigit(0)}>0</button> <button className='key key-decimal' onClick={inputDecimal}>.</button> <button className='key key-equals' onClick={handleEqual}>=</button> </div> </div> ); }
