我真是闲得蛋疼。。。

<template>
<div id="app">
<div id="display">{{display}}</div>
<div class="button" v-for="item in buttons" :key="item" @click="deal(item)">{{item}}</div>
</div>
</template>
<script>
export default {
name: 'app',
data: function () {
return {
buttons: ['1', '2', '3', '+', '4', '5', '6','-', '7', '8','9', '*','=','c','.','/'],
display: '0',
numBefore: '0',
symbol: ''
}
},
methods: {
deal: function(item) {
const numCheck = /[0-9]/ // 检测是否为数字
const methodCheck = /[+-*/]/ //检测是否为操作符号
if(numCheck.test(item)){
if(this.display === '0'){
this.display = item //如果是0的话,直接替换
}else {
this.display += item
}
}else if(methodCheck.test(item)){
if(this.symbol !== ''){
this.deal('=')
}
this.numBefore = this.display //存入被操作数
this.symbol = item //符号
this.display = '0'
}else if(item === '='){
console.log('is equal')
switch (this.symbol) {
case '+':
this.display = (parseFloat(this.display) + parseFloat(this.numBefore)).toFixed(4)
// 获得答案,保留4位小数
break;
case '-':
this.display = (parseFloat(this.numBefore) - parseFloat(this.display)).toFixed(4)
break;
case '*':
this.display = (parseFloat(this.display) * parseFloat(this.numBefore)).toFixed(4)
break;
case '/':
if(this.display === '0'){
alert('0????')
return
}else{
this.display = (parseFloat(this.numBefore) / parseFloat(this.display)).toFixed(4)
}
break;
default:
break;
}
this.symbol = '' //计算完成,符号置空
let dotLoc = this.display.indexOf('.')
if(dotLoc !== '-1'){ //处理小数点后多余的0
let count = 0
for(let i = this.display.length-1; i > dotLoc; i--){
if(this.display[i]=== '0'){
count++
}else{
break;
}
}
this.display = this.display.substr(0, this.display.length-count)
if(this.display[this.display.length-1] === '.'){ //处理多余的小数点
this.display = this.display.substr(0, this.display.length-1)
}
}
}else if(item === '.'){
if(this.display.indexOf('.')){
this.display += item
}
}else if(item === 'c'){
this.display = '0'
this.numBefore = '0'
this.symbol = ''
}
}
}
}
</script>
<style lang="scss" scoped>
#app {
display: grid;
300px;
grid-template-rows: repeat(5, 1fr);
grid-template-columns: repeat(4, 1fr);
justify-items: center;
grid-gap: 5px 5px;
#display {
// $h: 15px;
calc(100% - 20px);
height: 30px;
grid-column: 1 / 5;
border-radius: 4px;
box-shadow: 1px 1px 3px gray;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
font-size: 20px;
text-align: right;
}
.button{
50px;
height: 30px;
border: gray;
border-radius: 4px;
box-shadow: 1px 1px 3px gray;
&:active {
box-shadow: 1px 1px 3px rgb(255, 0, 0);
}
}
}
</style>