1// 计ç®å¨ç¶æ 2let calculatorState = { 3 currentValue: '0', 4 previousValue: null, 5 operator: null, 6 newNumber: true, 7 calculated: false 8}; 9 10// æ´æ°æ¾ç¤º 11function updateDisplay() { 12 document.getElementById('calculator-input').value = calculatorState.currentValue; 13} 14 15// æ·»å æ°å 16function appendNumber(number) { 17 if (calculatorState.newNumber || calculatorState.currentValue === '0' || calculatorState.calculated) { 18 calculatorState.currentValue = number.toString(); 19 calculatorState.newNumber = false; 20 calculatorState.calculated = false; 21 } else { 22 calculatorState.currentValue += number.toString(); 23 } 24 updateDisplay(); 25} 26 27// æ·»å å°æ°ç¹ 28function appendDecimal() { 29 if (calculatorState.calculated) { 30 calculatorState.currentValue = '0'; 31 calculatorState.calculated = false; 32 } 33 if (!calculatorState.currentValue.includes('.')) { 34 calculatorState.currentValue += '.'; 35 calculatorState.newNumber = false; 36 } 37 updateDisplay(); 38} 39 40// 设置è¿ç®ç¬¦ 41function setOperator(op) { 42 if (calculatorState.operator && !calculatorState.newNumber) { 43 calculate(); 44 } 45 calculatorState.operator = op; 46 calculatorState.previousValue = calculatorState.currentValue; 47 calculatorState.newNumber = true; 48 calculatorState.calculated = false; 49} 50 51// 计ç®ç»æ 52function calculate() { 53 if (!calculatorState.operator || calculatorState.newNumber) { 54 return; 55 } 56 57 const prev = parseFloat(calculatorState.previousValue); 58 const current = parseFloat(calculatorState.currentValue); 59 let result; 60 61 switch (calculatorState.operator) { 62 case '+': 63 result = prev + current; 64 break; 65 case '-': 66 result = prev - current; 67 break; 68 case '*': 69 result = prev * current; 70 break; 71 case '/': 72 if (current === 0) { 73 result = 'Error'; 74 } else { 75 result = prev / current; 76 } 77 break; 78 default: 79 return; 80 } 81 82 // å¤çå°æ°ç¹åç使° 83 if (typeof result === 'number') { 84 result = Math.round(result * 1000000) / 1000000; 85 } 86 87 calculatorState.currentValue = result.toString(); 88 calculatorState.operator = null; 89 calculatorState.newNumber = true; 90 calculatorState.calculated = true; 91 updateDisplay(); 92} 93 94// æ¸ é¤ææ 95function clearCalculator() { 96 calculatorState = { 97 currentValue: '0', 98 previousValue: null, 99 operator: null, 100 newNumber: true, 101 calculated: false 102 }; 103 updateDisplay(); 104} 105 106// æ¸ é¤å½åè¾å ¥ 107function clearEntry() { 108 calculatorState.currentValue = '0'; 109 calculatorState.newNumber = true; 110 updateDisplay(); 111} 112 113// éæ ¼ 114function backspace() { 115 if (calculatorState.calculated || calculatorState.currentValue === '0') { 116 return; 117 } 118 calculatorState.currentValue = calculatorState.currentValue.slice(0, -1); 119 if (calculatorState.currentValue === '' || calculatorState.currentValue === '-') { 120 calculatorState.currentValue = '0'; 121 } 122 updateDisplay(); 123} 124 125// æ£è´å·åæ¢ 126function toggleSign() { 127 if (calculatorState.currentValue === '0') { 128 return; 129 } 130 calculatorState.currentValue = calculatorState.currentValue.startsWith('-') 131 ? calculatorState.currentValue.slice(1) 132 : '-' + calculatorState.currentValue; 133 updateDisplay(); 134}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.