PageSourceSearch

https://fangg.netlify.app/js/apps/calculator.js

js fangg.netlify.app collected 2026-10-03 10:43:29 UTC 3,509 bytes, 134 lines download raw bytes

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.