目录结构调整
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
// pages/calculator/calculator.ts
|
||||
Page({
|
||||
data: {
|
||||
displayValue: '0',
|
||||
history: '',
|
||||
operator: null as string | null,
|
||||
firstOperand: null as number | null,
|
||||
waitingForSecondOperand: false,
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
},
|
||||
|
||||
onDigit(e: any) {
|
||||
const digit = e.currentTarget.dataset.digit;
|
||||
const { displayValue, waitingForSecondOperand } = this.data;
|
||||
|
||||
if (waitingForSecondOperand) {
|
||||
this.setData({
|
||||
displayValue: digit,
|
||||
waitingForSecondOperand: false
|
||||
});
|
||||
} else {
|
||||
this.setData({
|
||||
displayValue: displayValue === '0' ? digit : displayValue + digit
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onDot() {
|
||||
const { displayValue, waitingForSecondOperand } = this.data;
|
||||
if (waitingForSecondOperand) {
|
||||
this.setData({
|
||||
displayValue: '0.',
|
||||
waitingForSecondOperand: false
|
||||
});
|
||||
} else if (displayValue.indexOf('.') === -1) {
|
||||
this.setData({
|
||||
displayValue: displayValue + '.'
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onClear() {
|
||||
this.setData({
|
||||
displayValue: '0',
|
||||
history: '',
|
||||
operator: null,
|
||||
firstOperand: null,
|
||||
waitingForSecondOperand: false
|
||||
});
|
||||
},
|
||||
|
||||
onDelete() {
|
||||
const { displayValue } = this.data;
|
||||
this.setData({
|
||||
displayValue: displayValue.length > 1 ? displayValue.slice(0, -1) : '0'
|
||||
});
|
||||
},
|
||||
|
||||
onOperator(e: any) {
|
||||
const nextOperator = e.currentTarget.dataset.op;
|
||||
const { displayValue, operator, firstOperand } = this.data;
|
||||
const inputValue = parseFloat(displayValue);
|
||||
|
||||
if (operator && this.data.waitingForSecondOperand) {
|
||||
this.setData({
|
||||
operator: nextOperator,
|
||||
history: `${firstOperand} ${nextOperator}`
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
let newFirstOperand = firstOperand;
|
||||
|
||||
if (firstOperand == null) {
|
||||
newFirstOperand = inputValue;
|
||||
} else if (operator) {
|
||||
const result = this.performCalculation(operator, firstOperand, inputValue);
|
||||
newFirstOperand = result;
|
||||
this.setData({
|
||||
displayValue: String(result),
|
||||
});
|
||||
}
|
||||
|
||||
this.setData({
|
||||
firstOperand: newFirstOperand,
|
||||
waitingForSecondOperand: true,
|
||||
operator: nextOperator,
|
||||
history: `${newFirstOperand} ${nextOperator}`
|
||||
});
|
||||
},
|
||||
|
||||
onEqual() {
|
||||
const { displayValue, operator, firstOperand } = this.data;
|
||||
const inputValue = parseFloat(displayValue);
|
||||
|
||||
if (operator && firstOperand != null) {
|
||||
const result = this.performCalculation(operator, firstOperand, inputValue);
|
||||
this.setData({
|
||||
displayValue: String(result),
|
||||
firstOperand: null,
|
||||
operator: null,
|
||||
waitingForSecondOperand: true,
|
||||
history: ''
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
performCalculation(operator: string, firstOperand: number, secondOperand: number) {
|
||||
switch (operator) {
|
||||
case '+':
|
||||
return firstOperand + secondOperand;
|
||||
case '-':
|
||||
return firstOperand - secondOperand;
|
||||
case '*':
|
||||
return firstOperand * secondOperand;
|
||||
case '/':
|
||||
return firstOperand / secondOperand;
|
||||
case '%':
|
||||
return firstOperand % secondOperand;
|
||||
default:
|
||||
return secondOperand;
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user