点击浏览该文件
这是我做的一个,模仿Windows自带的计算器,支持快捷键,进制转换。尤其是按运算法则运算(到现在,我也没见过这么好的Flash计算器,支持一下啦!
我的计算器类:
dynamic class Counter {
//输出的文字,是格式化了的,例如分组,科学记数法...
var output:String = "0";
//计算的文字,纯数字
var value:String = "0";
//是否分组
var grouping:Boolean = false;
//监听器用
var _listeners:Array = [];
//统计用
var data:Array = undefined;
var datas:Object = {Ave:undefined, Ave2:undefined, Sum:undefined, Sum2:undefined, S:undefined, S2:undefined};
//算式储存
private var count:Array = [];
//是否重新输入数字
private var isnew:Boolean = false;
//储存数字
private var remember:Number = undefined;
//暂时数字储存
private var nrem:String;
//暂时运算符储存
private var nsign:String = undefined;
//数制
private var systems:Number = 10;
//单位
private var units:Number = 0;
//括号中的
private var inbracket:Array = [];
//构造函数
function Counter(key:Boolean) {
if (key == undefined) {
key = true;
}
if (key) {
Key.addListener(this);
}
}
//清除键
function C() {
//清除所有数据
value = "0";
count = [];
isnew = true;
nsign = undefined;
CounterMessage("C");
}
//清空键
function CE() {
value = "0";
isnew = true;
CounterMessage("CE");
}
//BackSpace
function BackSpace() {
value = value.slice(0, -1);
if (value.length == 0) {
value = "0";
}
CounterMessage("BackSpace");
}
//输入数字
function numbers(n) {
n = n.toString().toUpperCase();
if (isnew) {
value = "0";
}
isnew = false;
//判断输入的数字是否在数制范围内
if (systems<=10) {
if (n.charCodeAt(0)<=47+systems) {
if (value != "0") {
value += n;
} else {
value = n;
}
CounterMessage(n);
}
} else if (systems>10 && systems<=36) {
if (n.charCodeAt(0)<=54+systems) {
if (value != "0") {
value += n;
} else {
value = n;
}
CounterMessage(n);
}
}
}
//小数点
function dot() {
if (systems == 10) {
if (isnew) {
value = output="0";
}
isnew = false;
if (value.indexOf(".") == -1) {
value += ".";
}
CounterMessage(".");
}
}
//正负号
function minuss() {
if (systems == 10) {
if (isnew) {
value = "0";
}
isnew = false;
if (value != "0") {
if (value.indexOf("-") == -1) {
value = "-"+value;
} else {
value = value.substr(1);
}
}
CounterMessage("+/-");
}
}
//+
function plus() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
}
count.push("+");
nsign = "+";
value = calculate();
isnew = true;
CounterMessage("+");
}
//-
function minus() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
}
count.push("-");
nsign = "-";
value = calculate();
isnew = true;
CounterMessage("-");
}
//*
function multiply() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += (parseInt(value, systems).toString());
}
}
count[count.length-1] += "*";
nsign = "*";
value = calculate();
isnew = true;
CounterMessage("*");
}
// /
function except() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += (parseInt(value, systems).toString());
}
}
count[count.length-1] += "/";
nsign = "/";
value = calculate();
isnew = true;
CounterMessage("/");
}
// =
function equal() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
nrem = value;
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
nrem = value;
} else {
if (count[count.length-1].substr(-1, 1) == "*" || count[count.length-1].substr(-1, 1) == "/" || count[count.length-1].substr(-1, 1) == "^") {
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
nrem = value;
} else {
//if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "*" || count[count.length-1] == "/" || count[count.length-1] == "^") {
//count.pop();
//}
if (nsign == "+") {
count.push("+");
count.push(parseInt2(nrem, systems, 10));
} else if (nsign == "-") {
count.push("-");
count.push(parseInt2(nrem, systems, 10));
} else if (nsign == "%") {
count.push("%");
count.push(parseInt2(nrem, systems, 10));
} else if (nsign == "*") {
count[count.length-1] += ("*"+parseInt2(nrem, systems, 10));
} else if (nsign == "+") {
count[count.length-1] += ("/"+parseInt2(nrem, systems, 10));
} else if (nsign == "^") {
count[count.length-1] += ("^"+parseInt2(nrem, systems, 10));
}
}
}
value = calculate();
isnew = true;
CounterMessage("=");
}
//sqrt
function sqrt() {
duseless();
if (systems == 10) {
value = Math.sqrt(Number(value)).toString();
} else {
value = Math.sqrt(parseInt(value, systems)).toString(systems).toUpperCase();
}
isnew = true;
CounterMessage("sqrt");
}
//取模
function Mod() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
}
count.push("%");
nsign = "%";
value = calculate();
isnew = true;
CounterMessage("Mod");
}
//x^y
function pow() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += (parseInt(value, systems).toString());
}
}
count[count.length-1] += "^";
nsign = "^";
value = calculate();
isnew = true;
CounterMessage("x^y");
}
//x^3
function pow3() {
duseless();
if (systems == 10) {
value = Math.pow(Number(value), 3).toString();
} else {
value = Math.pow(parseInt(value, systems), 3).toString(systems).toUpperCase();
}
isnew = true;
CounterMessage("x^3");
}
//x^2
function pow2() {
duseless();
if (systems == 10) {
value = Math.pow(Number(value), 2).toString();
} else {
value = Math.pow(parseInt(value, systems), 2).toString(systems).toUpperCase();
}
isnew = true;
CounterMessage("x^2");
}
//%
function percent() {
if (systems == 10) {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-") {
count.push((Number(value)/100).toString());
} else if (count.length == 0) {
count.push((Number(value)/100).toString());
} else {
count[count.length-1] += ((Number(value)/100).toString());
}
value = calculate();
isnew = true;
CounterMessage("%");
}
}
// 1/x
function reciprocal() {
duseless();
if (systems == 10) {
value = (1/Number(value)).toString();
} else {
value = (1/parseInt(value, systems)).toString(systems).toUpperCase();
}
isnew = true;
CounterMessage("1/x");
}
//化成科学记数法
function FtoE() {
if (systems == 10) {
duseless();
if (value.indexOf("e") == -1) {
value = ChangetoE(Number(value));
} else {
value = ChangetoF(Number(value));
}
CounterMessage("F-E");
}
}
// 阶乘
function factorial() {
if (systems == 10) {
var num:Number = 1;
for (var i = 1; i<=Math.floor(Number(value)); i++) {
num *= i;
}
value = num.toString();
CounterMessage("n!");
}
}
//三角函数
function sin() {
if (systems == 10) {
duseless();
if (units == 0) {
value = dtr(Number(value));
}
value = Math.sin(Number(value)).toString();
CounterMessage("sin");
}
}
function cos() {
if (systems == 10) {
duseless();
if (units == 0) {
value = dtr(Number(value));
}
value = Math.cos(Number(value)).toString();
CounterMessage("cos");
}
}
function tan() {
if (systems == 10) {
duseless();
if (units == 0) {
value = dtr(Number(value));
}
value = Math.tan(Number(value)).toString();
CounterMessage("tan");
}
}
//反三角函数
function asin() {
if (systems == 10) {
duseless();
value = Math.asin(Number(value)).toString();
if (units == 0) {
value = rtd(Number(value));
}
CounterMessage("asin");
}
}
function acos() {
if (systems == 10) {
duseless();
value = Math.acos(Number(value)).toString();
if (units == 0) {
value = rtd(Number(value));
}
CounterMessage("acos");
}
}
function atan() {
if (systems == 10) {
duseless();
value = Math.atan(Number(value)).toString();
if (units == 0) {
value = rtd(Number(value));
}
CounterMessage("atan");
}
}
//左括弧
function leftBracket() {
duseless();
if ((st=count[count.length-1].substr(-1, 1)) == "*" || st == "/" || st == "^" || (st=count[count.length-1]) == "+" || st == "-") {
inbracket.push({count:count});
value = "0";
count = [];
CounterMessage("(");
}
}
//右括弧
function rightBracket() {
if (inbracket.length != 0) {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-") {
if (systems == 10) {
count.push(value);
} else {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
}
} else if (count.length == 0) {
if (systems == 10) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
count.push(value);
}
} else if (count[count.length-1].substr(-1, 1) == "*" || count[count.length-1].substr(-1, 1) == "/" || count[count.length-1].substr(-1, 1) == "^") {
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
}
value = calculate();
isnew = true;
count = inbracket[inbracket.length-1].count;
inbracket.pop();
CounterMessage(")");
}
}
//取整
function int() {
if (systems == 10) {
duseless();
value = Math.floor(Number(value)).toString();
CounterMessage("int");
}
}
//显示小数部分
function aint() {
if (systems == 10) {
duseless();
value = (Number(value)-Math.floor(Number(value))).toString();
CounterMessage("aint");
}
}
//计算e的x次方
function exp() {
duseless();
if (systems == 10) {
value = Math.exp(Number(value)).toString(systems);
} else {
value = Math.exp(parseInt(value, systems)).toString(systems);
}
CounterMessage("exp");
}
//计算10的x次方
function Exp() {
duseless();
value = Math.pow(10, Number(parseInt2(value, systems, 10))).toString(systems);
CounterMessage("Exp");
}
//计算自然对数
function log() {
duseless();
if (systems == 10) {
value = Math.log(Number(value)).toString(systems);
} else {
value = Math.log(parseInt(value, systems)).toString(systems);
}
CounterMessage("log");
}
//将数字化为度-分-秒
function dms() {
if (systems == 10) {
if ((st=value.indexOf(".")) != -1) {
duseless();
var f:String = value.slice(0, st)+"."+(ss=(Number(value.substr(st+1))*60).toString()).substr(0, 2);
if (ss.length>2) {
value = f+(Number(ss.substr(2))*60).toString();
} else {
value = f;
}
value = Rtrim(value, "0");
CounterMessage("dms");
}
}
}
//将数字化为度
function adms() {
if (systems == 10) {
if ((st=value.indexOf(".")) != -1) {
duseless();
var s:Number = 0;
if (value.length>=st+4) {
s = Number(value.substr(st+3))/60;
while (s>10) {
s /= 10;
}
}
var f:Number = (Number(value.substr(st+1, 2))+s)/60;
value = (Math.floor(Number(value))+f).toString();
//value=Rtrim(value,"0")
CounterMessage("adms");
}
}
}
// 清除存储区的所有数字
function MC() {
remember = undefined;
isnew = true;
CounterMessage("MC");
}
// 输出存储区的所有数字
function MR() {
if (remember == undefined) {
value = "0";
} else {
value = remember.toString(systems);
}
isnew = true;
CounterMessage("MR");
}
// 将数字储存在存储区
function MS() {
duseless();
if (value != "0") {
if (systems == 10) {
remember = Number(value);
} else {
remember = parseInt(value, systems);
}
isnew = true;
CounterMessage("MS");
}
}
// 将存储区的数字与以有数字相加
function MP() {
duseless();
if (value != "0") {
if (systems == 10) {
remember += Number(value);
} else {
remember += parseInt(value, systems);
}
isnew = true;
CounterMessage("M+");
}
}
//进入,退出统计模式
function Sta() {
if (data == undefined) {
data = [];
isnew = true;
CounterMessage("Sta");
} else {
data = undefined;
datas = {Ave:undefined, Ave2:undefined, Sum:undefined, Sum2:undefined, S:undefined, S2:undefined};
isnew = true;
CounterMessage("Sta");
}
}
//求平均值
//Ave=(x1+x2+x3+...+xn)/xn
function Ave() {
if (data != undefined) {
if (data.length == 0) {
datas.Ave = 0;
value = "0";
} else if (datas.Ave != undefined) {
value = datas.Ave.toString(systems);
} else {
//计算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;
value = datas.Ave.toString(systems);
}
isnew = true;
CounterMessage("Ave");
}
}
//求均方值
//Ave2=Ave*Ave+S*S
function Ave2() {
if (data != undefined) {
if (data.length == 0) {
datas.Ave2 = 0;
value = "0";
} else if (datas.Ave2 != undefined) {
value = datas.Ave2.toString(systems);
} else {
//计算Ave2
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;
}
//计算S
if (datas.S == undefined) {
//计算Sum2
if (datas.Sum2 == undefined) {
var num2:Number = 0;
for (var j in data) {
num2 += data[j]*data[j];
}
}
datas.S = Math.sqrt((datas.Sum2-data.length*datas.Ave*datas.Ave)/data.length);
}
datas.Ave2 = datas.Ave*datas.Ave+datas.S*datas.S;
value = datas.Ave2.toString(systems);
}
isnew = true;
CounterMessage("Ave2");
}
}
//求数据和
//Sum=x1+x2+x3+...+xn
function Sum() {
if (data != undefined) {
if (data.length == 0) {
datas.Sum = 0;
value = "0";
} else if (datas.Sum != undefined) {
value = datas.Sum.toString(systems);
} else {
//计算Sum
if (datas.Ave != undefined) {
datas.Sum = datas.Ave*data.length;
value = datas.Sum.toString(systems);
} else {
var num:Number = 0;
for (var i in data) {
num += data[i];
}
datas.Sum = num;
value = datas.Sum.toString(systems);
}
}
isnew = true;
CounterMessage("Sum");
}
}
//求数据平方和
//Sum2=x1*x1+x2*x2+x3*x3+...+xn*xn
function Sum2() {
if (data != undefined) {
if (data.length == 0) {
datas.Sum2 = 0;
value = "0";
} else if (datas.Sum2 != undefined) {
value = datas.Sum2.toString(systems);
} else {
//计算Sum2
var num:Number = 0;
for (var i in data) {
num += data[i]*data[i];
}
datas.Sum2 = num;
value = datas.Sum2.toString(systems);
}
isnew = true;
CounterMessage("Sum2");
}
}
//求总体参数为n的标准差
//S=Math.sqrt((Sum2-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.length; i++) {
if (Number(ns[i]) == 0) {
nt++;
} else {
break;
}
}
var nz = String(n).substr(nt+2, 1);
var nx = String(n).substr(nt+3);
if (nx != "") {
return String(nz+"."+nx+"e-"+(nt+1));
} else {
return String(nz+"e-"+(nt+1));
}
} else {
return n;
}
}
}
//化成普通数
function ChangetoF(n:Number) {
var ns = String(n);
if (ns.indexOf("e") == -1) {
return n;
} else {
var nss = ns.split("e");
var nz = nss[0];
var nx = nss[1];
if (nz.indexOf(".") == -1) {
for (var i = 0; i<Number(nx); i++) {
nz += "0";
}
} else {
var nzs = nz.split(".");
var nzz = nzs[0];
if (nzs[1].length<=Number(nx)) {
for (var i = 0; i<(Number(nx)-Number(nzs[1])); i++) {
nzz += "0";
}
nz = nzz;
}
return String(nz);
}
}
}
//ChangetoF和ChangetoE函数支持,删除字符串右边的指定字符
function Rtrim(n:String, d:String) {
if (d == undefined) {
d = " ";
}
if (n.indexOf(d) != -1) {
var ss = n.split("");
var ssl = ss.length;
for (var i = ssl; i>=0; i--) {
if (ss[i] == d) {
if (i+1 == ss.length) {
ss.pop();
}
}
}
return ss.join("");
} else {
return n;
}
}
//***************************************************************************
//监听键盘用
function onKeyDown(Ob) {
if ((Key.isDown(48) || Key.isDown(96)) && !Key.isDown(16)) {
numbers(0);
}
if ((Key.isDown(49) || Key.isDown(97)) && !Key.isDown(16)) {
numbers(1);
}
if ((Key.isDown(50) || Key.isDown(98)) && !Key.isDown(16)) {
numbers(2);
}
if ((Key.isDown(51) || Key.isDown(99)) && !Key.isDown(16)) {
numbers(3);
}
if ((Key.isDown(52) || Key.isDown(100)) && !Key.isDown(16)) {
numbers(4);
}
if ((Key.isDown(53) || Key.isDown(101)) && !Key.isDown(16)) {
numbers(5);
}
if ((Key.isDown(54) || Key.isDown(102)) && !Key.isDown(16)) {
numbers(6);
}
if ((Key.isDown(55) || Key.isDown(103)) && !Key.isDown(16)) {
numbers(7);
}
if ((Key.isDown(56) || Key.isDown(104)) && !Key.isDown(16)) {
numbers(8);
}
if ((Key.isDown(57) || Key.isDown(105)) && !Key.isDown(16)) {
numbers(9);
}
// A键
if (Key.isDown(65)) {
numbers("A");
}
// B键
if (Key.isDown(66)) {
numbers("B");
}
// C键
if (Key.isDown(67)) {
numbers("C");
}
// D键
if (Key.isDown(68)) {
numbers("D");
}
// E键
if (Key.isDown(69)) {
numbers("E");
}
// F键
if (Key.isDown(70)) {
numbers("F");
}
// F9 键
if (Key.isDown(120)) {
minuss();
}
//.键
if (Key.isDown(110)) {
dot();
}
//BackSpace键
if (Key.isDown(8)) {
BackSpace();
}
//ESC 键
if (Key.isDown(27)) {
C();
}
// delete 键
if (Key.isDown(46)) {
CE();
}
//+键
if (Key.isDown(107)) {
plus();
}
//-键
if (Key.isDown(109)) {
minus();
}
//*键或shift+8
if (Key.isDown(106) || (Key.isDown(56) && Key.isDown(16))) {
multiply();
}
// /键
if (Key.isDown(111) || Key.isDown(191)) {
except();
}
//shift+2
if (Key.isDown(50) && Key.isDown(16)) {
sqrt();
}
//Enter
if (Key.isDown(13)) {
equal();
}
//shift+5
if (Key.isDown(53) && Key.isDown(16)) {
percent();
}
// R键
if (Key.isDown(82)) {
reciprocal();
}
//ctrl+L
if (Key.isDown(76) && Key.isDown(17)) {
MC();
}
//ctrl+R
if (Key.isDown(82) && Key.isDown(17)) {
MR();
}
//ctrl+M
if (Key.isDown(77) && Key.isDown(17)) {
MS();
}
//ctrl+P
if (Key.isDown(80) && Key.isDown(17)) {
MP();
}
//P键
if (Key.isDown(80)) {
PI();
}
//T键
if (Key.isDown(84)) {
tan();
}
//ctrl+T
if (Key.isDown(84) && Key.isDown(17)) {
atan();
}
//S键
if (Key.isDown(83)) {
sin();
}
//ctrl+S
if (Key.isDown(83) && Key.isDown(17)) {
asin();
}
//O键
if (Key.isDown(79)) {
cos();
}
//ctrl+O
if (Key.isDown(79) && Key.isDown(17)) {
acos();
}
//ctrl+2
if (Key.isDown(50) && Key.isDown(17)) {
pow2();
}
//;键
if (Key.isDown(186)) {
this.int();
}
//ctrl+;
if (Key.isDown(186) && Key.isDown(17)) {
aint();
}
//V键
if (Key.isDown(86)) {
FtoE();
}
//shift+9
if (Key.isDown(57) && Key.isDown(16)) {
leftBracket();
}
//shift+0
if (Key.isDown(48) && Key.isDown(16)) {
rightBracket();
}
//shift+3
if (Key.isDown(51) && Key.isDown(16)) {
pow3();
}
//Y键
if (Key.isDown(89)) {
pow();
}
//N键
if (Key.isDown(78)) {
log();
}
//shift+N
if (Key.isDown(78) && Key.isDown(16)) {
exp();
}
//L键
if (Key.isDown(76)) {
Exp();
}
//shift+!
if (Key.isDown(49) && Key.isDown(16)) {
factorial();
}
//M键
if (Key.isDown(77)) {
dms();
}
//shift+M
if (Key.isDown(77) && Key.isDown(16)) {
adms();
}
//ctrl+5
if (Key.isDown(53) && Key.isDown(17)) {
Mod();
}
//ctrl+S
if (Key.isDown(83) && Key.isDown(17)) {
Sta();
}
//shift+A
if (Key.isDown(65) && Key.isDown(16)) {
Ave();
}
//ctrl+A
if (Key.isDown(65) && Key.isDown(17)) {
Ave2();
}
//shift+T
if (Key.isDown(84) && Key.isDown(16)) {
Sum();
}
//ctrl+T
if (Key.isDown(84) && Key.isDown(17)) {
Sum2();
}
//shift+D
if (Key.isDown(68) && Key.isDown(16)) {
S();
}
//ctrl+D
if (Key.isDown(68) && Key.isDown(17)) {
S2();
}
//Insert键
if (Key.isDown(45) && Key.isDown(17)) {
Data();
}
//ctrl+shift+L
if (Key.isDown(76) && Key.isDown(17) && Key.isDown(16)) {
load();
}
//ctrl+shift+C
if (Key.isDown(67) && Key.isDown(17) && Key.isDown(16)) {
clear();
}
//ctrl+shift+A
if (Key.isDown(65) && Key.isDown(17) && Key.isDown(16)) {
clearAll();
}
}
//监听器用
function addListener(Ob:Object) {
_listeners.push(Ob);
}
function removeListener(Ob:Object) {
for (var i = 0; i<_listeners.length; i++) {
if (_listeners[i] == Ob) {
_listeners.splice(i, 1);
}
}
}
function broadcastMessage() {
for (var i = 0; i<_listeners.length; i++) {
_listeners[i][arguments[0]](arguments[1], arguments[2], arguments[3]);
}
}
function CounterMessage(n:String) {
group();
broadcastMessage("onKeyDown", n, output, value);
}
//Getter And Setter
function get memory():Number {
return getMemory();
}
function getMemory():Number {
return remember;
}
function get hasMemory():Boolean {
return gethasMemory();
}
function gethasMemory():Boolean {
return (remember != undefined);
}
function set system(n:Number) {
setSystem(n);
}
function get system():Number {
return getSystem();
}
function setSystem(n:Number) {
if (n>=2 && n<=36) {
changeS(n);
}
}
function getSystem():Number {
return systems;
}
function set unit(n:String) {
setUnit(n);
}
function get unit():String {
return getUnit();
}
function setUnit(n:String) {
if (n == "radian") {
units = 1;
} else if (n == "degree") {
units = 0;
}
}
function getUnit():String {
var n:String = "";
if (units=1) {
n == "radian";
} else if (units=0) {
n == "degree";
}
return n;
}
function get hasBracket():Boolean {
return gethasBracket();
}
function gethasBracket():Boolean {
return (inbracket.length != 0);
}
function get bracketNum():Number {
return getBracketNum();
}
function getBracketNum():Number {
return inbracket.length;
}
function get hasData():Boolean {
return gethasData();
}
function gethasData():Boolean {
return (data != undefined);
}
function get n():Number {
return getN();
}
function getN():Number {
return data.length;
}
}
//End
//输出的文字,是格式化了的,例如分组,科学记数法...
var output:String = "0";
//计算的文字,纯数字
var value:String = "0";
//是否分组
var grouping:Boolean = false;
//监听器用
var _listeners:Array = [];
//统计用
var data:Array = undefined;
var datas:Object = {Ave:undefined, Ave2:undefined, Sum:undefined, Sum2:undefined, S:undefined, S2:undefined};
//算式储存
private var count:Array = [];
//是否重新输入数字
private var isnew:Boolean = false;
//储存数字
private var remember:Number = undefined;
//暂时数字储存
private var nrem:String;
//暂时运算符储存
private var nsign:String = undefined;
//数制
private var systems:Number = 10;
//单位
private var units:Number = 0;
//括号中的
private var inbracket:Array = [];
//构造函数
function Counter(key:Boolean) {
if (key == undefined) {
key = true;
}
if (key) {
Key.addListener(this);
}
}
//清除键
function C() {
//清除所有数据
value = "0";
count = [];
isnew = true;
nsign = undefined;
CounterMessage("C");
}
//清空键
function CE() {
value = "0";
isnew = true;
CounterMessage("CE");
}
//BackSpace
function BackSpace() {
value = value.slice(0, -1);
if (value.length == 0) {
value = "0";
}
CounterMessage("BackSpace");
}
//输入数字
function numbers(n) {
n = n.toString().toUpperCase();
if (isnew) {
value = "0";
}
isnew = false;
//判断输入的数字是否在数制范围内
if (systems<=10) {
if (n.charCodeAt(0)<=47+systems) {
if (value != "0") {
value += n;
} else {
value = n;
}
CounterMessage(n);
}
} else if (systems>10 && systems<=36) {
if (n.charCodeAt(0)<=54+systems) {
if (value != "0") {
value += n;
} else {
value = n;
}
CounterMessage(n);
}
}
}
//小数点
function dot() {
if (systems == 10) {
if (isnew) {
value = output="0";
}
isnew = false;
if (value.indexOf(".") == -1) {
value += ".";
}
CounterMessage(".");
}
}
//正负号
function minuss() {
if (systems == 10) {
if (isnew) {
value = "0";
}
isnew = false;
if (value != "0") {
if (value.indexOf("-") == -1) {
value = "-"+value;
} else {
value = value.substr(1);
}
}
CounterMessage("+/-");
}
}
//+
function plus() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
}
count.push("+");
nsign = "+";
value = calculate();
isnew = true;
CounterMessage("+");
}
//-
function minus() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
}
count.push("-");
nsign = "-";
value = calculate();
isnew = true;
CounterMessage("-");
}
//*
function multiply() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += (parseInt(value, systems).toString());
}
}
count[count.length-1] += "*";
nsign = "*";
value = calculate();
isnew = true;
CounterMessage("*");
}
// /
function except() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += (parseInt(value, systems).toString());
}
}
count[count.length-1] += "/";
nsign = "/";
value = calculate();
isnew = true;
CounterMessage("/");
}
// =
function equal() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
nrem = value;
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
nrem = value;
} else {
if (count[count.length-1].substr(-1, 1) == "*" || count[count.length-1].substr(-1, 1) == "/" || count[count.length-1].substr(-1, 1) == "^") {
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
nrem = value;
} else {
//if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "*" || count[count.length-1] == "/" || count[count.length-1] == "^") {
//count.pop();
//}
if (nsign == "+") {
count.push("+");
count.push(parseInt2(nrem, systems, 10));
} else if (nsign == "-") {
count.push("-");
count.push(parseInt2(nrem, systems, 10));
} else if (nsign == "%") {
count.push("%");
count.push(parseInt2(nrem, systems, 10));
} else if (nsign == "*") {
count[count.length-1] += ("*"+parseInt2(nrem, systems, 10));
} else if (nsign == "+") {
count[count.length-1] += ("/"+parseInt2(nrem, systems, 10));
} else if (nsign == "^") {
count[count.length-1] += ("^"+parseInt2(nrem, systems, 10));
}
}
}
value = calculate();
isnew = true;
CounterMessage("=");
}
//sqrt
function sqrt() {
duseless();
if (systems == 10) {
value = Math.sqrt(Number(value)).toString();
} else {
value = Math.sqrt(parseInt(value, systems)).toString(systems).toUpperCase();
}
isnew = true;
CounterMessage("sqrt");
}
//取模
function Mod() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
//if(count[count.length-1].substr(-1,1)=="*"||count[count.length-1].substr(-1,1)=="/"){
//count[count.length-1]=count[count.length-1].slice(0,-1)
//}
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
}
count.push("%");
nsign = "%";
value = calculate();
isnew = true;
CounterMessage("Mod");
}
//x^y
function pow() {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-" || count[count.length-1] == "%") {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else if (count.length == 0) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += (parseInt(value, systems).toString());
}
}
count[count.length-1] += "^";
nsign = "^";
value = calculate();
isnew = true;
CounterMessage("x^y");
}
//x^3
function pow3() {
duseless();
if (systems == 10) {
value = Math.pow(Number(value), 3).toString();
} else {
value = Math.pow(parseInt(value, systems), 3).toString(systems).toUpperCase();
}
isnew = true;
CounterMessage("x^3");
}
//x^2
function pow2() {
duseless();
if (systems == 10) {
value = Math.pow(Number(value), 2).toString();
} else {
value = Math.pow(parseInt(value, systems), 2).toString(systems).toUpperCase();
}
isnew = true;
CounterMessage("x^2");
}
//%
function percent() {
if (systems == 10) {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-") {
count.push((Number(value)/100).toString());
} else if (count.length == 0) {
count.push((Number(value)/100).toString());
} else {
count[count.length-1] += ((Number(value)/100).toString());
}
value = calculate();
isnew = true;
CounterMessage("%");
}
}
// 1/x
function reciprocal() {
duseless();
if (systems == 10) {
value = (1/Number(value)).toString();
} else {
value = (1/parseInt(value, systems)).toString(systems).toUpperCase();
}
isnew = true;
CounterMessage("1/x");
}
//化成科学记数法
function FtoE() {
if (systems == 10) {
duseless();
if (value.indexOf("e") == -1) {
value = ChangetoE(Number(value));
} else {
value = ChangetoF(Number(value));
}
CounterMessage("F-E");
}
}
// 阶乘
function factorial() {
if (systems == 10) {
var num:Number = 1;
for (var i = 1; i<=Math.floor(Number(value)); i++) {
num *= i;
}
value = num.toString();
CounterMessage("n!");
}
}
//三角函数
function sin() {
if (systems == 10) {
duseless();
if (units == 0) {
value = dtr(Number(value));
}
value = Math.sin(Number(value)).toString();
CounterMessage("sin");
}
}
function cos() {
if (systems == 10) {
duseless();
if (units == 0) {
value = dtr(Number(value));
}
value = Math.cos(Number(value)).toString();
CounterMessage("cos");
}
}
function tan() {
if (systems == 10) {
duseless();
if (units == 0) {
value = dtr(Number(value));
}
value = Math.tan(Number(value)).toString();
CounterMessage("tan");
}
}
//反三角函数
function asin() {
if (systems == 10) {
duseless();
value = Math.asin(Number(value)).toString();
if (units == 0) {
value = rtd(Number(value));
}
CounterMessage("asin");
}
}
function acos() {
if (systems == 10) {
duseless();
value = Math.acos(Number(value)).toString();
if (units == 0) {
value = rtd(Number(value));
}
CounterMessage("acos");
}
}
function atan() {
if (systems == 10) {
duseless();
value = Math.atan(Number(value)).toString();
if (units == 0) {
value = rtd(Number(value));
}
CounterMessage("atan");
}
}
//左括弧
function leftBracket() {
duseless();
if ((st=count[count.length-1].substr(-1, 1)) == "*" || st == "/" || st == "^" || (st=count[count.length-1]) == "+" || st == "-") {
inbracket.push({count:count});
value = "0";
count = [];
CounterMessage("(");
}
}
//右括弧
function rightBracket() {
if (inbracket.length != 0) {
duseless();
if (count[count.length-1] == "+" || count[count.length-1] == "-") {
if (systems == 10) {
count.push(value);
} else {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
}
} else if (count.length == 0) {
if (systems == 10) {
if (systems == 10) {
count.push(value);
} else {
count.push(parseInt(value, systems).toString());
}
} else {
count.push(value);
}
} else if (count[count.length-1].substr(-1, 1) == "*" || count[count.length-1].substr(-1, 1) == "/" || count[count.length-1].substr(-1, 1) == "^") {
if (systems == 10) {
count[count.length-1] += value;
} else {
count[count.length-1] += parseInt(value, systems).toString();
}
}
value = calculate();
isnew = true;
count = inbracket[inbracket.length-1].count;
inbracket.pop();
CounterMessage(")");
}
}
//取整
function int() {
if (systems == 10) {
duseless();
value = Math.floor(Number(value)).toString();
CounterMessage("int");
}
}
//显示小数部分
function aint() {
if (systems == 10) {
duseless();
value = (Number(value)-Math.floor(Number(value))).toString();
CounterMessage("aint");
}
}
//计算e的x次方
function exp() {
duseless();
if (systems == 10) {
value = Math.exp(Number(value)).toString(systems);
} else {
value = Math.exp(parseInt(value, systems)).toString(systems);
}
CounterMessage("exp");
}
//计算10的x次方
function Exp() {
duseless();
value = Math.pow(10, Number(parseInt2(value, systems, 10))).toString(systems);
CounterMessage("Exp");
}
//计算自然对数
function log() {
duseless();
if (systems == 10) {
value = Math.log(Number(value)).toString(systems);
} else {
value = Math.log(parseInt(value, systems)).toString(systems);
}
CounterMessage("log");
}
//将数字化为度-分-秒
function dms() {
if (systems == 10) {
if ((st=value.indexOf(".")) != -1) {
duseless();
var f:String = value.slice(0, st)+"."+(ss=(Number(value.substr(st+1))*60).toString()).substr(0, 2);
if (ss.length>2) {
value = f+(Number(ss.substr(2))*60).toString();
} else {
value = f;
}
value = Rtrim(value, "0");
CounterMessage("dms");
}
}
}
//将数字化为度
function adms() {
if (systems == 10) {
if ((st=value.indexOf(".")) != -1) {
duseless();
var s:Number = 0;
if (value.length>=st+4) {
s = Number(value.substr(st+3))/60;
while (s>10) {
s /= 10;
}
}
var f:Number = (Number(value.substr(st+1, 2))+s)/60;
value = (Math.floor(Number(value))+f).toString();
//value=Rtrim(value,"0")
CounterMessage("adms");
}
}
}
// 清除存储区的所有数字
function MC() {
remember = undefined;
isnew = true;
CounterMessage("MC");
}
// 输出存储区的所有数字
function MR() {
if (remember == undefined) {
value = "0";
} else {
value = remember.toString(systems);
}
isnew = true;
CounterMessage("MR");
}
// 将数字储存在存储区
function MS() {
duseless();
if (value != "0") {
if (systems == 10) {
remember = Number(value);
} else {
remember = parseInt(value, systems);
}
isnew = true;
CounterMessage("MS");
}
}
// 将存储区的数字与以有数字相加
function MP() {
duseless();
if (value != "0") {
if (systems == 10) {
remember += Number(value);
} else {
remember += parseInt(value, systems);
}
isnew = true;
CounterMessage("M+");
}
}
//进入,退出统计模式
function Sta() {
if (data == undefined) {
data = [];
isnew = true;
CounterMessage("Sta");
} else {
data = undefined;
datas = {Ave:undefined, Ave2:undefined, Sum:undefined, Sum2:undefined, S:undefined, S2:undefined};
isnew = true;
CounterMessage("Sta");
}
}
//求平均值
//Ave=(x1+x2+x3+...+xn)/xn
function Ave() {
if (data != undefined) {
if (data.length == 0) {
datas.Ave = 0;
value = "0";
} else if (datas.Ave != undefined) {
value = datas.Ave.toString(systems);
} else {
//计算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;
value = datas.Ave.toString(systems);
}
isnew = true;
CounterMessage("Ave");
}
}
//求均方值
//Ave2=Ave*Ave+S*S
function Ave2() {
if (data != undefined) {
if (data.length == 0) {
datas.Ave2 = 0;
value = "0";
} else if (datas.Ave2 != undefined) {
value = datas.Ave2.toString(systems);
} else {
//计算Ave2
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;
}
//计算S
if (datas.S == undefined) {
//计算Sum2
if (datas.Sum2 == undefined) {
var num2:Number = 0;
for (var j in data) {
num2 += data[j]*data[j];
}
}
datas.S = Math.sqrt((datas.Sum2-data.length*datas.Ave*datas.Ave)/data.length);
}
datas.Ave2 = datas.Ave*datas.Ave+datas.S*datas.S;
value = datas.Ave2.toString(systems);
}
isnew = true;
CounterMessage("Ave2");
}
}
//求数据和
//Sum=x1+x2+x3+...+xn
function Sum() {
if (data != undefined) {
if (data.length == 0) {
datas.Sum = 0;
value = "0";
} else if (datas.Sum != undefined) {
value = datas.Sum.toString(systems);
} else {
//计算Sum
if (datas.Ave != undefined) {
datas.Sum = datas.Ave*data.length;
value = datas.Sum.toString(systems);
} else {
var num:Number = 0;
for (var i in data) {
num += data[i];
}
datas.Sum = num;
value = datas.Sum.toString(systems);
}
}
isnew = true;
CounterMessage("Sum");
}
}
//求数据平方和
//Sum2=x1*x1+x2*x2+x3*x3+...+xn*xn
function Sum2() {
if (data != undefined) {
if (data.length == 0) {
datas.Sum2 = 0;
value = "0";
} else if (datas.Sum2 != undefined) {
value = datas.Sum2.toString(systems);
} else {
//计算Sum2
var num:Number = 0;
for (var i in data) {
num += data[i]*data[i];
}
datas.Sum2 = num;
value = datas.Sum2.toString(systems);
}
isnew = true;
CounterMessage("Sum2");
}
}
//求总体参数为n的标准差
//S=Math.sqrt((Sum2-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.length; i++) {
if (Number(ns[i]) == 0) {
nt++;
} else {
break;
}
}
var nz = String(n).substr(nt+2, 1);
var nx = String(n).substr(nt+3);
if (nx != "") {
return String(nz+"."+nx+"e-"+(nt+1));
} else {
return String(nz+"e-"+(nt+1));
}
} else {
return n;
}
}
}
//化成普通数
function ChangetoF(n:Number) {
var ns = String(n);
if (ns.indexOf("e") == -1) {
return n;
} else {
var nss = ns.split("e");
var nz = nss[0];
var nx = nss[1];
if (nz.indexOf(".") == -1) {
for (var i = 0; i<Number(nx); i++) {
nz += "0";
}
} else {
var nzs = nz.split(".");
var nzz = nzs[0];
if (nzs[1].length<=Number(nx)) {
for (var i = 0; i<(Number(nx)-Number(nzs[1])); i++) {
nzz += "0";
}
nz = nzz;
}
return String(nz);
}
}
}
//ChangetoF和ChangetoE函数支持,删除字符串右边的指定字符
function Rtrim(n:String, d:String) {
if (d == undefined) {
d = " ";
}
if (n.indexOf(d) != -1) {
var ss = n.split("");
var ssl = ss.length;
for (var i = ssl; i>=0; i--) {
if (ss[i] == d) {
if (i+1 == ss.length) {
ss.pop();
}
}
}
return ss.join("");
} else {
return n;
}
}
//***************************************************************************
//监听键盘用
function onKeyDown(Ob) {
if ((Key.isDown(48) || Key.isDown(96)) && !Key.isDown(16)) {
numbers(0);
}
if ((Key.isDown(49) || Key.isDown(97)) && !Key.isDown(16)) {
numbers(1);
}
if ((Key.isDown(50) || Key.isDown(98)) && !Key.isDown(16)) {
numbers(2);
}
if ((Key.isDown(51) || Key.isDown(99)) && !Key.isDown(16)) {
numbers(3);
}
if ((Key.isDown(52) || Key.isDown(100)) && !Key.isDown(16)) {
numbers(4);
}
if ((Key.isDown(53) || Key.isDown(101)) && !Key.isDown(16)) {
numbers(5);
}
if ((Key.isDown(54) || Key.isDown(102)) && !Key.isDown(16)) {
numbers(6);
}
if ((Key.isDown(55) || Key.isDown(103)) && !Key.isDown(16)) {
numbers(7);
}
if ((Key.isDown(56) || Key.isDown(104)) && !Key.isDown(16)) {
numbers(8);
}
if ((Key.isDown(57) || Key.isDown(105)) && !Key.isDown(16)) {
numbers(9);
}
// A键
if (Key.isDown(65)) {
numbers("A");
}
// B键
if (Key.isDown(66)) {
numbers("B");
}
// C键
if (Key.isDown(67)) {
numbers("C");
}
// D键
if (Key.isDown(68)) {
numbers("D");
}
// E键
if (Key.isDown(69)) {
numbers("E");
}
// F键
if (Key.isDown(70)) {
numbers("F");
}
// F9 键
if (Key.isDown(120)) {
minuss();
}
//.键
if (Key.isDown(110)) {
dot();
}
//BackSpace键
if (Key.isDown(8)) {
BackSpace();
}
//ESC 键
if (Key.isDown(27)) {
C();
}
// delete 键
if (Key.isDown(46)) {
CE();
}
//+键
if (Key.isDown(107)) {
plus();
}
//-键
if (Key.isDown(109)) {
minus();
}
//*键或shift+8
if (Key.isDown(106) || (Key.isDown(56) && Key.isDown(16))) {
multiply();
}
// /键
if (Key.isDown(111) || Key.isDown(191)) {
except();
}
//shift+2
if (Key.isDown(50) && Key.isDown(16)) {
sqrt();
}
//Enter
if (Key.isDown(13)) {
equal();
}
//shift+5
if (Key.isDown(53) && Key.isDown(16)) {
percent();
}
// R键
if (Key.isDown(82)) {
reciprocal();
}
//ctrl+L
if (Key.isDown(76) && Key.isDown(17)) {
MC();
}
//ctrl+R
if (Key.isDown(82) && Key.isDown(17)) {
MR();
}
//ctrl+M
if (Key.isDown(77) && Key.isDown(17)) {
MS();
}
//ctrl+P
if (Key.isDown(80) && Key.isDown(17)) {
MP();
}
//P键
if (Key.isDown(80)) {
PI();
}
//T键
if (Key.isDown(84)) {
tan();
}
//ctrl+T
if (Key.isDown(84) && Key.isDown(17)) {
atan();
}
//S键
if (Key.isDown(83)) {
sin();
}
//ctrl+S
if (Key.isDown(83) && Key.isDown(17)) {
asin();
}
//O键
if (Key.isDown(79)) {
cos();
}
//ctrl+O
if (Key.isDown(79) && Key.isDown(17)) {
acos();
}
//ctrl+2
if (Key.isDown(50) && Key.isDown(17)) {
pow2();
}
//;键
if (Key.isDown(186)) {
this.int();
}
//ctrl+;
if (Key.isDown(186) && Key.isDown(17)) {
aint();
}
//V键
if (Key.isDown(86)) {
FtoE();
}
//shift+9
if (Key.isDown(57) && Key.isDown(16)) {
leftBracket();
}
//shift+0
if (Key.isDown(48) && Key.isDown(16)) {
rightBracket();
}
//shift+3
if (Key.isDown(51) && Key.isDown(16)) {
pow3();
}
//Y键
if (Key.isDown(89)) {
pow();
}
//N键
if (Key.isDown(78)) {
log();
}
//shift+N
if (Key.isDown(78) && Key.isDown(16)) {
exp();
}
//L键
if (Key.isDown(76)) {
Exp();
}
//shift+!
if (Key.isDown(49) && Key.isDown(16)) {
factorial();
}
//M键
if (Key.isDown(77)) {
dms();
}
//shift+M
if (Key.isDown(77) && Key.isDown(16)) {
adms();
}
//ctrl+5
if (Key.isDown(53) && Key.isDown(17)) {
Mod();
}
//ctrl+S
if (Key.isDown(83) && Key.isDown(17)) {
Sta();
}
//shift+A
if (Key.isDown(65) && Key.isDown(16)) {
Ave();
}
//ctrl+A
if (Key.isDown(65) && Key.isDown(17)) {
Ave2();
}
//shift+T
if (Key.isDown(84) && Key.isDown(16)) {
Sum();
}
//ctrl+T
if (Key.isDown(84) && Key.isDown(17)) {
Sum2();
}
//shift+D
if (Key.isDown(68) && Key.isDown(16)) {
S();
}
//ctrl+D
if (Key.isDown(68) && Key.isDown(17)) {
S2();
}
//Insert键
if (Key.isDown(45) && Key.isDown(17)) {
Data();
}
//ctrl+shift+L
if (Key.isDown(76) && Key.isDown(17) && Key.isDown(16)) {
load();
}
//ctrl+shift+C
if (Key.isDown(67) && Key.isDown(17) && Key.isDown(16)) {
clear();
}
//ctrl+shift+A
if (Key.isDown(65) && Key.isDown(17) && Key.isDown(16)) {
clearAll();
}
}
//监听器用
function addListener(Ob:Object) {
_listeners.push(Ob);
}
function removeListener(Ob:Object) {
for (var i = 0; i<_listeners.length; i++) {
if (_listeners[i] == Ob) {
_listeners.splice(i, 1);
}
}
}
function broadcastMessage() {
for (var i = 0; i<_listeners.length; i++) {
_listeners[i][arguments[0]](arguments[1], arguments[2], arguments[3]);
}
}
function CounterMessage(n:String) {
group();
broadcastMessage("onKeyDown", n, output, value);
}
//Getter And Setter
function get memory():Number {
return getMemory();
}
function getMemory():Number {
return remember;
}
function get hasMemory():Boolean {
return gethasMemory();
}
function gethasMemory():Boolean {
return (remember != undefined);
}
function set system(n:Number) {
setSystem(n);
}
function get system():Number {
return getSystem();
}
function setSystem(n:Number) {
if (n>=2 && n<=36) {
changeS(n);
}
}
function getSystem():Number {
return systems;
}
function set unit(n:String) {
setUnit(n);
}
function get unit():String {
return getUnit();
}
function setUnit(n:String) {
if (n == "radian") {
units = 1;
} else if (n == "degree") {
units = 0;
}
}
function getUnit():String {
var n:String = "";
if (units=1) {
n == "radian";
} else if (units=0) {
n == "degree";
}
return n;
}
function get hasBracket():Boolean {
return gethasBracket();
}
function gethasBracket():Boolean {
return (inbracket.length != 0);
}
function get bracketNum():Number {
return getBracketNum();
}
function getBracketNum():Number {
return inbracket.length;
}
function get hasData():Boolean {
return gethasData();
}
function gethasData():Boolean {
return (data != undefined);
}
function get n():Number {
return getN();
}
function getN():Number {
return data.length;
}
}
//End
运算的关键是calculate()和evals()。前者是把算式合理拆分,后者负责计算只包含乘,除和幂的字符串。然后在由calculate()计算加,减,取模,这就实现了按运算法则运算。希望能帮忙再改进一下。
还有,里面的阶乘(factorial()函数)希望会的同志改一下,现在只能算整数,最好整数,小数通吃。顺便问一下,梯度是什么?怎么换算?我希望能做出比Windows自带的计算器更好的计算器,至少功能要同样丰富。
as文件:
点击浏览该文件
