【发布时间】:2020-07-08 07:12:57
【问题描述】:
作为序言,我是一个尝试用 Javascript 创建计算器的初学者。我目前有一个包含数学运算符的 switch 语句。我的问题是,在 switch 语句中,我想在尝试除以 0 时包含一个涉及除法的错误消息(字符串);但是,无论我做什么,我总是在计算器的“显示”中得到无穷大。
非常感谢任何数量的帮助,即使这意味着我必须重新做这整件事。这是执行实际计算的函数的 sn-p(虽然它在一个类中,但如果需要,我将在整个代码块中进行编辑)。
selectedOperation(operation) {
if (this.currentDisplay === '') return;
if (this.prevDisplay !== '') {
this.calculate();
}
this.operation = operation;
this.prevDisplay = this.currentDisplay;
this.currentDisplay = '';
}
calculate() {
let calculation;
const previousNum = parseFloat(this.prevDisplay);
const currentNum = parseFloat(this.currentDisplay);
if (isNaN(previousNum) || isNaN(currentNum)) return;
switch (this.operation) {
case '+' :
calculation = previousNum + currentNum
break;
case '-' :
calculation = previousNum - currentNum
break;
case 'x' :
calculation = previousNum * currentNum
break;
case '÷' :
calculation = previousNum / currentNum
if (currentNum === 0) return "error";
break;
default:
return;
}
this.currentDisplay = calculation;
this.operation = undefined;
this.prevDisplay = '';
}
**EDIT**:
getDisplayNumber(number) {
const stringNumber = number.toString();
const integerDigits = parseFloat(stringNumber.split('.')[0]);
const decimalDigits = stringNumber.split('.')[1];
let integerDisplay
if (isNaN(integerDigits)) {
integerDisplay = '';
} else {
integerDisplay = integerDigits.toLocaleString('en', {maximumFractionDigits: 0 });
}
if (decimalDigits != null) {
return `${integerDisplay}.${decimalDigits}`;
} return integerDisplay;
}
updateDisplay() {
this.cdisplay.innerText =
this.getDisplayNumber(this.currentDisplay);
if(this.operation != null) {
this.display.innerText =
`${this.prevDisplay} ${this.operation}`;
} else {
this.display.innerText = '';
}
}
【问题讨论】:
-
您应该考虑在尝试操作之前验证
currentNum。也许这个先前的答案会有所帮助:stackoverflow.com/questions/8072323/… -
您似乎并没有捕捉到回报,而是在
selectedOperation()中调用calculate()。将返回值存储在变量中并检查它(?)。
标签: javascript if-statement switch-statement divide-by-zero