微信小程式(看文件寫例項一)微信小程式計算器例項
Page({
data: {
back: 'back',
C: 'C',
addSub: 'addSub',
add: '+',
sub: '-',
mut: '×',
div: '÷',
equ: '=',
history: 'history',
dot: '.',
id0: '0',
id1: '1',
id2: '2',
id3: '3',
id4: '4',
id5: '5',
id6: '6',
id7: '7',
id8: '8',
id9: '9',
result:'0',
valiBackOfArray: ['+', '-', '×', '÷', '.'],
completeCalculate:false
},
// 計算結果
calculate: function (str) {
// 判斷是不是有負數
var isNagativeNum = false;
if (str.charAt(0) == '-') {
str = str.replace('-', '').replace('(', '').replace(')', '');
isNagativeNum = true;
}
// 對字串解析並運算
var addArray = str.split('+');
var sum = 0.0;
for(var i =0;i<addArray.length;i++){
if (addArray[i].indexOf('-') == -1) {
if (addArray[i].indexOf('×') != -1 || addArray[i].indexOf('÷') != -1)
sum += this.calculateMutDiv(addArray[i]);
else sum += Number(addArray[i]);
}
else{
var subArray = addArray[i].split('-');
var subSum = 0;
if (subArray[0].indexOf('×') != -1 || subArray[0].indexOf('÷') != -1) subSum = this.calculateMutDiv(subArray[0]);
else subSum = Number(subArray[0]);
for (var j = 1; j < subArray.length; j++) {
if(subArray[i].indexOf('×') != -1 || subArray[i].indexOf('÷') != -1)
subSum -= this.calculateMutDiv(subArray[j]);
else subSum -= Number(subArray[j]);
}
sum+=subSum;
}
}
if(isNagativeNum)return (-sum).toString();
else return sum.toString();
},
// 分塊乘除運算
calculateMutDiv: function (str) {
var addArray = str.split('×');
var sum = 1.0;
for (var i = 0; i < addArray.length; i++) {
if (addArray[i].indexOf('÷') == -1) {
sum *= Number(addArray[i]);
}
else {
var subArray = addArray[i].split('÷');
var subSum = Number(subArray[0]);
for (var j = 1; j < subArray.length; j++) {
subSum /= Number(subArray[j]);
}
sum *= subSum;
}
}
return sum;
},
// 是否以運算子結尾
isOperatorEnd:function(str){
for(var i = 0;i<this.data.valiBackOfArray.length;i++){
if (str.charAt(str.length - 1) == this.data.valiBackOfArray[i])return true;
}
return false;
},
clickButton:function(event){
if (this.data.result==0){
if (event.target.id == 'back' || event.target.id == 'C' || event.target.id == 'addSub' || event.target.id == 'history' || event.target.id == '+' || event.target.id == '-' || event.target.id == '×' || event.target.id == '÷' || event.target.id == '=')return;
this.setData({result:event.target.id});
}
else if (event.target.id == 'back' ) {
this.setData({ result: this.data.result.length ==1?'0':this.data.result.substring(0, this.data.result.length-1) });
}
else if (event.target.id == 'C') {
this.setData({ result: '0'});
}
else if (event.target.id == 'addSub') {
var r = this.data.result;
if (this.isOperatorEnd(r)) return;
if (r.charAt(0) == '-') this.setData({ result: r.replace('-', '').replace('(', '').replace(')', '') });
else this.setData({ result: '-('+r+')'});
}
else if (event.target.id == 'history') {
}
else if (event.target.id=='='){
if (this.isOperatorEnd(this.data.result))return;
this.setData({result:this.calculate(this.data.result)});
this.setData({completeCalculate: true});
}
else{
if (this.isOperatorEnd(this.data.result) && this.isOperatorEnd(event.target.id)) return;
// 如果計算結果有小數點,直到輸入運算子前不能再輸入小數點
if (this.data.completeCalculate&&this.data.result.indexOf('.') != -1 && event.target.id == '.')return;
for (var i = 0; i < this.data.valiBackOfArray.length -1 ; i++) {
if (this.data.valiBackOfArray[i] == event.target.id){
this.setData({ completeCalculate: false });
break;
}
}
this.setData({ result: this.data.result + event.target.id });
}
}
})