| 用as设计计算器,按照运算法则运算 |
| 责任编辑:admin 更新日期:2005-8-6 |
2-n*Ave*Ave)/n) function S() { if (data != undefined) { if (data.length == 0) { datas.S = 0; value = "0"; } else if (datas.S != undefined) { value = datas.S.toString(systems); } else { if (datas.Ave == undefined) { //计算Ave if (datas.Sum != undefined) { var num:Number = datas.Sum; } else { var num:Number = 0; for (var i in data) { num += data[i]; } } datas.Ave = num/data.length; } //计算Sum2 if (datas.Sum2 == undefined) { var num2:Number = 0; for (var j in data) { num2 += data[j]*data[j]; } datas.Sum2 = num2; } //计算S datas.S = Math.sqrt((datas.Sum2-data.length*datas.Ave*datas.Ave)/data.length); value = datas.S.toString(systems); } isnew = true; CounterMessage("S"); } } //求总体参数为n-1的标准差 //S2=Math.sqrt((Sum2-(n-1)*Ave*Ave)/(n-1)) function S2() { if (data != undefined) { if (data.length == 0) { datas.S2 = 0; value = "0"; } else if (datas.S2 != undefined) { value = datas.S2.toString(systems); } else { if (datas.Ave == undefined) { //计算Ave if (datas.Sum != undefined) { var num:Number = datas.Sum; } else { var num:Number = 0; for (var i in data) { num += data[i]; } } datas.Ave = num/data.length; } //计算Sum2 if (datas.Sum2 == undefined) { var num2:Number = 0; for (var j in data) { num2 += data[j]*data[j]; } datas.Sum2 = num2; } //计算S datas.S2 = Math.sqrt((datas.Sum2-(data.length-1)*datas.Ave*datas.Ave)/(data.length-1)); value = datas.S2.toString(systems); } isnew = true; CounterMessage("S2"); } } //添加数据 function Data() { if (data != undefined) { if (systems == 10) { data.push(Number(value)); } else { data.push(parseInt(value, systems)); } datas = {Ave:undefined, Ave2:undefined, Sum:undefined, Sum2:undefined, S:undefined, S2:undefined}; isnew = true; CounterMessage("Data"); } } //将数据显示在显示框中 function load(n:Number) { if (data != undefined) { value = data[n].toString(systems); isnew = true; CounterMessage("load"); } } //清除数据 function clear(n:Number) { if (data != undefined) { data = data.slice(0, n).concat(data.slice(n+1)); isnew = true; CounterMessage("clear"); } } //清除全部数据 function clearAll() { if (data != undefined) { data = []; isnew = true; CounterMessage("clearAll"); } } // 显示Math.PI function PI() { if (systems == 10) { value = String(Math.PI); isnew = true; CounterMessage("PI"); } } //****************************************************************** //私有函数 //根据运算符号计算,与evals和evalPow构成了计算的核心 private function calculate():String { var c:Array = count; //trace(c) if (c.length == 1) { if (c[0].substr(-1, 1) == "^") { var st = Math.max(c[0].lastIndexOf("*"), c[0].lastIndexOf("/")); if (st != -1) { var n:Number = evals(c[0].slice(0, st)); c[0] = n.toString()+c[0].slice(st); return evals(c[0].slice(st+1, -1)).toString(systems); } else { var n:Number = evals(c[0].slice(0, -1)); c[0] = n.toString()+"^"; return n.toString(systems); } } else if (c[0].substr(-1, 1) == "*" || c[0].substr(-1, 1) == "/") { var n:Number = evals(c[0].slice(0, -1)); c[0] = n.toString()+c[0].substr(-1, 1); return n.toString(systems); } else { var n:Number = evals(c[0]); c[0] = n.toString(); return n.toString(systems); } } else if (c.length == 2) { var n:Number = evals(c[0]); c[0] = n.toString(); return n.toString(systems); } else if (c.length == 3) { if (c[2].substr(-1, 1) == "^") { var st = Math.max(c[2].lastIndexOf("*"), c[2].lastIndexOf("/")); if (st != -1) { var n:Number = evals(c[2].slice(0, st)); c[2] = n.toString()+c[2].slice(st); return evals(c[2].slice(st, -1)).toString(systems); } else { var n:Number = evals(c[2].slice(0, -1)); c[2] = n.toString()+"^"; return n.toString(systems); } } else if (c[2].substr(-1, 1,) == "*" || c[2].substr(-1, 1) == "/") { var n:Number = evals(c[2].slice(0, -1)); c[2] = n.toString()+c[2].substr(-1, 1); return n.toString(systems); } else { //trace(c[1]) if (c[1] == "+") { c[0] = (Number(c[0])+evals(c[2])).toString(); c[1] = c[3]; c.length = 1; return parseInt2(c[0], 10, systems); } else if (c[1] == "-") { c[0] = (Number(c[0])-evals(c[2])).toString(); c[1] = c[3]; c.length = 1; return parseInt2(c[0], 10, systems); } else if (c[1] == "%") { //trace(Number(c[0])%evals(c[2])) c[0] = (Number(c[0])%evals(c[2])).toString(); c[1] = c[3]; c.length = 1; return parseInt2(c[0], 10, systems); } } } else if (c.length == 4) { if (c[1] == "+") { c[0] = (Number(c[0])+evals(c[2])).toString(); c[1] = c[3]; c.length = 2; return parseInt2(c[0], 10, systems); } else if (c[1] == "-") { c[0] = (Number(c[0])-evals(c[2])).toString(); c[1] = c[3]; c.length = 2; return parseInt2(c[0], 10, systems); } else if (c[1] == "%") { c[0] = (Number(c[0])%evals(c[2])).toString(); c[1] = c[3]; c.length = 2; return parseInt2(c[0], 10, systems); } } } //根据运算符号运算 private function evals(n:String):Number { if (n.indexOf("^") == -1) { if (n.indexOf("*") == -1 && n.indexOf("/") == -1) { return Number(n); } else { var st:Number; var st2:String; var num:Number = Number(n.substr(0, (st=Math.min((n.indexOf("*") == -1) ? Infinity : n.indexOf("*"), (n.indexOf("/") == -1) ? Infinity : n.indexOf("/"))))); n = n.slice(st); while (n.length>0) { st2 = n.substr(0, 1); n = n.slice(1); var st = Math.min((n.indexOf("*") == -1) ? Infinity : n.indexOf("*"), (n.indexOf("/") == -1) ? Infinity : n.indexOf("/")); var mu = Number(n.substr(0, (st == Infinity) ? n.length : st)); if (st2 == "*") { num *= mu; n = n.slice((st == Infinity) ? 0 : st); } else if (st2 == "/") { num /= mu; n = n.slice((st == Infinity) ? 0 : st); } } return num; } } else { if (n.indexOf("*") == -1 && n.indexOf("/") == -1) { return evalPow(n); } else { var r = new Array(); var size = n.length; var c = 0; for (var i = 0; i<=size; ++i) { if (substring(n, i+1, 1) == "*" || substring(n, i+1, 1) == "/") { r.push(substring(n, c+1, i-c)); r.push(substring(n, i+1, 1)); c = i+1; } } if (c != i) { r.push(substring(n, c+1, i-c)); r.push(substring(n, i+1, 1)); } var num:Number = evalPow(r[0]); for (var j = 1; j<r.length-1; j += 2) { if (r[j] == "*") { num *= evalPow(r[j+1]); } else { num /= evalPow(r[j+1]); } } return num; } } } //计算x^y^z^... private function evalPow(n:String):Number { if (n.indexOf("^") == -1) { return Number(n); } else { var st:Number; var num:Number = Number(n.substr(0, (st=n.indexOf("^")))); n = n.slice(st+1); while (n.length>0) { var st = (n.indexOf("^") == -1) ? n.length : n.indexOf("^"); var mu = Number(n.substr(0, st)); n = n.slice(st+1); num = Math.pow(num, mu); } return num; } } //删除无用的符号 private function duseless() { if (value.substr(-1) == ".") { value = value.slice(0, -1); } } //改变数制 private function changeS(n:Number) { value = parseInt2(value, systems, n); systems = n; CounterMessage("SystemChange"); isnew = true; } //进制转化换 function parseInt2(s:String, from:Number, to:Number):String { if (from == 10) { return Number(s).toString(to).toUpperCase(); } else { return parseInt(s, from).toString(to).toUpperCase(); } } //角度转化为弧度 function dtr(angle:Number) { return angle*(Math.PI/180); } //弧度转化为角度 function rtd(angle:Number) { return angle*(180/Math.PI); } //数字分组 private function group() { output = value; if (grouping) { if (output.indexOf("e") == -1) { if (systems == 10) { var sign = ","; var n:Number = 3; } else { var sign = " "; var n:Number = 4; } if (output != "0") { if (output.indexOf(".") != -1) { var num = output.indexOf("."); } else { var num = output.length; } for (var i = num-n; i>0; i -= n) { if (output.slice(0, i) != "-") { output = output.slice(0, i).concat(sign, output.slice(i)); } } } } } } //化成科学记数法 function ChangetoE(n:Number) { if (n>=1) { if (String(n).length<16) { var nz = Math.floor(n); var nx = String(n).slice(String(nz).length+1); nx = Rtrim(nx, "0"); var ns = String(nz).split(""); var nsp = ns[0]+"."; for (var i = 1; i<ns.length; i++) { if (nx == 0) { if (ns[i] == 0) { var del = true; for (var j = i; j<ns.length; j++) { if (!ns[i] == 0) { del = false; break; } } if (del) { break; } } else { nsp += ns[i]; } } else { nsp += ns[i]; } } nsp = String(nsp); nsp = Rtrim(nsp, "0"); if (nx == "") { if (String(nsp).substr(-1, 1) == ".") { nsp = String(nsp).slice(0, -1); } } else { nx = String(nx); nsp += Rtrim(nx, "0"); } return String(nsp+"e+"+(ns.length-1)); } else { return n; } } else { if (n == 0) { return "0e+0"; } else if (n>0.00001) { var ns = String(n).split(""); var nt = 0; for (var i = 2; i<ns.上一页 [1] [2] [3] [4] 下一页 |
|
| 上一篇文章: 使用fscommand如何正确调用exe文件 |
| 下一篇文章: getURL实现框架的更新 |
|
|
|
|