1. 程式人生 > >微信小程式(看文件寫例項一)微信小程式計算器例項

微信小程式(看文件寫例項一)微信小程式計算器例項

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 });

}

}

})