function ScientificCalculator({ t }) { const [display, setDisplay] = useState('0'); const [expression, setExpression] = useState(''); const [memory, setMemory] = useState(0); const [angleMode, setAngleMode] = useState('deg'); // deg or rad const appendToDisplay = (value) => { if (display === '0' && value !== '.') { setDisplay(value); } else { setDisplay(display + value); } }; const appendToExpression = (value) => { setExpression(expression + value); setDisplay('0'); }; const clear = () => { setDisplay('0'); setExpression(''); }; const backspace = () => { if (display.length > 1) { setDisplay(display.slice(0, -1)); } else { setDisplay('0'); } }; const calculate = () => { try { const fullExpression = expression + display; const result = eval(fullExpression); setDisplay(String(result)); setExpression(''); } catch (error) { setDisplay('Error'); setExpression(''); } }; const scientificFunction = (fn) => { try { let x = parseFloat(display); let result; // Convert to radians if in degree mode for trig functions if (angleMode === 'deg' && ['sin', 'cos', 'tan'].includes(fn)) { x = x * (Math.PI / 180); } switch (fn) { case 'sin': result = Math.sin(x); break; case 'cos': result = Math.cos(x); break; case 'tan': result = Math.tan(x); break; case 'asin': result = Math.asin(x) * (angleMode === 'deg' ? 180 / Math.PI : 1); break; case 'acos': result = Math.acos(x) * (angleMode === 'deg' ? 180 / Math.PI : 1); break; case 'atan': result = Math.atan(x) * (angleMode === 'deg' ? 180 / Math.PI : 1); break; case 'log': result = Math.log10(x); break; case 'ln': result = Math.log(x); break; case 'sqrt': result = Math.sqrt(x); break; case 'square': result = x * x; break; case 'cube': result = x * x * x; break; case 'factorial': result = 1; for (let i = 2; i <= x; i++) result *= i; break; case 'inverse': result = 1 / x; break; case 'abs': result = Math.abs(x); break; case 'exp': result = Math.exp(x); break; default: result = x; } setDisplay(String(result)); } catch (error) { setDisplay('Error'); } }; const handleOperator = (op) => { setExpression(expression + display + op); setDisplay('0'); }; const insertConstant = (constant) => { setDisplay(String(constant)); }; const memoryAdd = () => setMemory(memory + parseFloat(display)); const memorySubtract = () => setMemory(memory - parseFloat(display)); const memoryRecall = () => setDisplay(String(memory)); const memoryClear = () => setMemory(0); return (

🔬 {t('tools.scientificCalculator') || "Scientific Calculator"}

{/* Display */}
{expression || '\u00A0'}
{display}
{/* Mode and Memory Indicators */}
{memory !== 0 && `M: ${memory}`}
{/* Calculator Buttons */}
{/* Row 1: Memory and Clear */} {/* Row 2: Scientific Functions */} {/* Row 3: More Scientific Functions */} {/* Row 4: Advanced Functions */} {/* Row 5: Numbers and Operations */} {/* Row 6: Constants */}
); } // Export to global registry window.ScientificCalculator = ScientificCalculator;