点击浏览该文件
http://www.Flash8.net/bbs/UploadFile/2005-2/200521317347540.swf
这是我做的一个,模仿Windows自带的计算器,支持快捷键,进制转换。尤其是按运算法则运算(到现在,我也没见过这么好的Flash计算器,支持一下啦!
我的计算器类:
dynamicclassCounter{
//输出的文字,是格式化了的,例如分组,科学记数法...
varoutput:String="0";
//计算的文字,纯数字
varvalue:String="0";
//是否分组
vargrouping:Boolean=false;
//监听器用
var_listeners:Array=[];
//统计用
vardata:Array=undefined;
vardatas:Object={Ave:undefined,Ave2:undefined,Sum:undefined,Sum2:undefined,S:undefined,S2:undefined};
//算式储存
privatevarcount:Array=[];
//是否重新输入数字
privatevarisnew:Boolean=false;
//储存数字
privatevarremember:Number=undefined;
//暂时数字储存
privatevarnrem:String;
//暂时运算符储存
privatevarnsign:String=undefined;
//数制
privatevarsystems:Number=10;
//单位
privatevarunits:Number=0;
//括号中的
privatevarinbracket:Array=[];
//构造函数
functionCounter(key:Boolean){
if(key==undefined){
key=true;
}
if(key){
Key.addListener(this);
}
}
//清除键
functionC(){
//清除所有数据
value="0";
count=[];
isnew=true;
nsign=undefined;
CounterMessage("C");
}
//清空键
functionCE(){
value="0";
isnew=true;
CounterMessage("CE");
}
//BackSpace
functionBackSpace(){
value=value.slice(0,-1);
if(value.length==0){
value="0";
}
CounterMessage("BackSpace");
}
//输入数字
functionnumbers(n){
n=n.toString().toUpperCase();
if(isnew){
value="0";
}
isnew=false;
//判断输入的数字是否在数制范围内
if(systems<=10){
if(n.charCodeAt(0)10&&systems<=36){
if(n.charCodeAt(0)<=54+systems){
if(value!="0"){
value+=n;
}else{
value=n;
}
CounterMessage(n);
}
}
}
//小数点
functiondot(){
if(systems==10){
if(isnew){
value=output="0";
}
isnew=false;
if(value.indexOf(".")==-1){
value+=".";
}
CounterMessage(".");
}
}
//正负号
functionminuss(){
if(systems==10){
if(isnew){
value="0";
}
isnew=false;
if(value!="0"){
if(value.indexOf("-")==-1){
value="-"+value;
}else{
value=value.substr(1);
}
}
CounterMessage("+/-");
}
}
//+
functionplus(){
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());
}
}elseif(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("+");
}
//-
functionminus(){
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());
}
}elseif(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("-");
}
//*
functionmultiply(){
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());
}
}elseif(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("*");
}
///
functionexcept(){
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());
}
}elseif(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("/");
}
//=
functionequal(){
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;
}elseif(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));
}elseif(nsign=="-"){
count.push("-");
count.push(parseInt2(nrem,systems,10));
}elseif(nsign=="%"){
count.push("%");
count.push(parseInt2(nrem,systems,10));
}elseif(nsign=="*"){
count[count.length-1]+=("*"+parseInt2(nrem,systems,10));
}elseif(nsign=="+"){
count[count.length-1]+=("/"+parseInt2(nrem,systems,10));
}elseif(nsign=="^"){
count[count.length-1]+=("^"+parseInt2(nrem,systems,10));
}
}
}
value=calculate();
isnew=true;
CounterMessage("=");
}
//sqrt
functionsqrt(){
duseless();
if(systems==10){
value=Math.sqrt(Number(value)).toString();
}else{
value=Math.sqrt(parseInt(value,systems)).toString(systems).toUpperCase();
}
isnew=true;
CounterMessage("sqrt");
}
//取模
functionMod(){
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());
}
}elseif(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
functionpow(){
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());
}
}elseif(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
functionpow3(){
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
functionpow2(){
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");
}
//%
functionpercent(){
if(systems==10){
duseless();
if(count[count.length-1]=="+"||count[count.length-1]=="-"){
count.push((Number(value)/100).toString());
}elseif(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
functionreciprocal(){
duseless();
if(systems==10){
value=(1/Number(value)).toString();
}else{
value=(1/parseInt(value,systems)).toString(systems).toUpperCase();
}
isnew=true;
CounterMessage("1/x");
}
//化成科学记数法
functionFtoE(){
if(systems==10){
duseless();
if(value.indexOf("e")==-1){
value=ChangetoE(Number(value));
}else{
value=ChangetoF(Number(value));
}
CounterMessage("F-E");
}
}
//阶乘
functionfactorial(){
if(systems==10){
varnum:Number=1;
for(vari=1;i2){
value=f+(Number(ss.substr(2))*60).toString();
}else{
value=f;
}
value=Rtrim(value,"0");
CounterMessage("dms");
}
}
}
//将数字化为度
functionadms(){
if(systems==10){
if((st=value.indexOf("."))!=-1){
duseless();
vars:Number=0;
if(value.length>=st+4){
s=Number(value.substr(st+3))/60;
while(s>10){
s/=10;
}
}
varf:Number=(Number(value.substr(st+1,2))+s)/60;
value=(Math.floor(Number(value))+f).toString();
//value=Rtrim(value,"0")
CounterMessage("adms");
}
}
}
//清除存储区的所有数字
functionMC(){
remember=undefined;
isnew=true;
CounterMessage("MC");
}
//输出存储区的所有数字
functionMR(){
if(remember==undefined){
value="0";
}else{
value=remember.toString(systems);
}
isnew=true;
CounterMessage("MR");
}
//将数字储存在存储区
functionMS(){
duseless();
if(value!="0"){
if(systems==10){
remember=Number(value);
}else{
remember=parseInt(value,systems);
}
isnew=true;
CounterMessage("MS");
}
}
//将存储区的数字与以有数字相加
functionMP(){
duseless();
if(value!="0"){
if(systems==10){
remember+=Number(value);
}else{
remember+=parseInt(value,systems);
}
isnew=true;
CounterMessage("M+");
}
}
//进入,退出统计模式
functionSta(){
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
functionAve(){
if(data!=undefined){
if(data.length==0){
datas.Ave=0;
value="0";
}elseif(datas.Ave!=undefined){
value=datas.Ave.toString(systems);
}else{
//计算Ave
if(datas.Sum!=undefined){
varnum:Number=datas.Sum;
}else{
varnum:Number=0;
for(variindata){
num+=data[i];
}
}
datas.Ave=num/data.length;
value=datas.Ave.toString(systems);
}
isnew=true;
CounterMessage("Ave");
}
}
//求均方值
//Ave2=Ave*Ave+S*S
functionAve2(){
if(data!=undefined){
if(data.length==0){
datas.Ave2=0;
value="0";
}elseif(datas.Ave2!=undefined){
value=datas.Ave2.toString(systems);
}else{
//计算Ave2
if(datas.Ave==undefined){
//计算Ave
if(datas.Sum!=undefined){
varnum:Number=datas.Sum;
}else{
varnum:Number=0;
for(variindata){
num+=data[i];
}
}
datas.Ave=num/data.length;
}
//计算S
if(datas.S==undefined){
//计算Sum2
if(datas.Sum2==undefined){
varnum2:Number=0;
for(varjindata){
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
functionSum(){
if(data!=undefined){
if(data.length==0){
datas.Sum=0;
value="0";
}elseif(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{
varnum:Number=0;
for(variindata){
num+=data[i];
}
datas.Sum=num;
value=datas.Sum.toString(systems);
}
}
isnew=true;
CounterMessage("Sum");
}
}
//求数据平方和
//Sum2=x1*x1+x2*x2+x3*x3+...+xn*xn
functionSum2(){
if(data!=undefined){
if(data.length==0){
datas.Sum2=0;
value="0";
}elseif(datas.Sum2!=undefined){
value=datas.Sum2.toString(systems);
}else{
//计算Sum2
varnum:Number=0;
for(variindata){
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)
functionS(){
if(data!=undefined){
if(data.length==0){
datas.S=0;
value="0";
}elseif(datas.S!=undefined){
value=datas.S.toString(systems);
}else{
if(datas.Ave==undefined){
//计算Ave
if(datas.Sum!=undefined){
varnum:Number=datas.Sum;
}else{
varnum:Number=0;
for(variindata){
num+=data[i];
}
}
datas.Ave=num/data.length;
}
//计算Sum2
if(datas.Sum2==undefined){
varnum2:Number=0;
for(varjindata){
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))
functionS2(){
if(data!=undefined){
if(data.length==0){
datas.S2=0;
value="0";
}elseif(datas.S2!=undefined){
value=datas.S2.toString(systems);
}else{
if(datas.Ave==undefined){
//计算Ave
if(datas.Sum!=undefined){
varnum:Number=datas.Sum;
}else{
varnum:Number=0;
for(variindata){
num+=data[i];
}
}
datas.Ave=num/data.length;
}
//计算Sum2
if(datas.Sum2==undefined){
varnum2:Number=0;
for(varjindata){
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");
}
}
//添加数据
functionData(){
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");
}
}
//将数据显示在显示框中
functionload(n:Number){
if(data!=undefined){
value=data[n].toString(systems);
isnew=true;
CounterMessage("load");
}
}
//清除数据
functionclear(n:Number){
if(data!=undefined){
data=data.slice(0,n).concat(data.slice(n+1));
isnew=true;
CounterMessage("clear");
}
}
//清除全部数据
functionclearAll(){
if(data!=undefined){
data=[];
isnew=true;
CounterMessage("clearAll");
}
}
//显示Math.PI
functionPI(){
if(systems==10){
value=String(Math.PI);
isnew=true;
CounterMessage("PI");
}
}
//******************************************************************
//私有函数
//根据运算符号计算,与evals和evalPow构成了计算的核心
privatefunctioncalculate():String{
varc:Array=count;
//trace(c)
if(c.length==1){
if(c[0].substr(-1,1)=="^"){
varst=Math.max(c[0].lastIndexOf("*"),c[0].lastIndexOf("/"));
if(st!=-1){
varn:Number=evals(c[0].slice(0,st));
c[0]=n.toString()+c[0].slice(st);
returnevals(c[0].slice(st+1,-1)).toString(systems);
}else{
varn:Number=evals(c[0].slice(0,-1));
c[0]=n.toString()+"^";
returnn.toString(systems);
}
}elseif(c[0].substr(-1,1)=="*"||c[0].substr(-1,1)=="/"){
varn:Number=evals(c[0].slice(0,-1));
c[0]=n.toString()+c[0].substr(-1,1);
returnn.toString(systems);
}else{
varn:Number=evals(c[0]);
c[0]=n.toString();
returnn.toString(systems);
}
}elseif(c.length==2){
varn:Number=evals(c[0]);
c[0]=n.toString();
returnn.toString(systems);
}elseif(c.length==3){
if(c[2].substr(-1,1)=="^"){
varst=Math.max(c[2].lastIndexOf("*"),c[2].lastIndexOf("/"));
if(st!=-1){
varn:Number=evals(c[2].slice(0,st));
c[2]=n.toString()+c[2].slice(st);
returnevals(c[2].slice(st,-1)).toString(systems);
}else{
varn:Number=evals(c[2].slice(0,-1));
c[2]=n.toString()+"^";
returnn.toString(systems);
}
}elseif(c[2].substr(-1,1,)=="*"||c[2].substr(-1,1)=="/"){
varn:Number=evals(c[2].slice(0,-1));
c[2]=n.toString()+c[2].substr(-1,1);
returnn.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;
returnparseInt2(c[0],10,systems);
}elseif(c[1]=="-"){
c[0]=(Number(c[0])-evals(c[2])).toString();
c[1]=c[3];
c.length=1;
returnparseInt2(c[0],10,systems);
}elseif(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;
returnparseInt2(c[0],10,systems);
}
}
}elseif(c.length==4){
if(c[1]=="+"){
c[0]=(Number(c[0])+evals(c[2])).toString();
c[1]=c[3];
c.length=2;
returnparseInt2(c[0],10,systems);
}elseif(c[1]=="-"){
c[0]=(Number(c[0])-evals(c[2])).toString();
c[1]=c[3];
c.length=2;
returnparseInt2(c[0],10,systems);
}elseif(c[1]=="%"){
c[0]=(Number(c[0])%evals(c[2])).toString();
c[1]=c[3];
c.length=2;
returnparseInt2(c[0],10,systems);
}
}
}
//根据运算符号运算
privatefunctionevals(n:String):Number{
if(n.indexOf("^")==-1){
if(n.indexOf("*")==-1&&n.indexOf("/")==-1){
returnNumber(n);
}else{
varst:Number;
varst2:String;
varnum: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);
varst=Math.min((n.indexOf("*")==-1)?Infinity:n.indexOf("*"),(n.indexOf("/")==-1)?Infinity:n.indexOf("/"));
varmu=Number(n.substr(0,(st==Infinity)?n.length:st));
if(st2=="*"){
num*=mu;
n=n.slice((st==Infinity)?0:st);
}elseif(st2=="/"){
num/=mu;
n=n.slice((st==Infinity)?0:st);
}
}
returnnum;
}
}else{
if(n.indexOf("*")==-1&&n.indexOf("/")==-1){
returnevalPow(n);
}else{
varr=newArray();
varsize=n.length;
varc=0;
for(vari=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));
}
varnum:Number=evalPow(r[0]);
for(varj=1;j0){
varst=(n.indexOf("^")==-1)?n.length:n.indexOf("^");
varmu=Number(n.substr(0,st));
n=n.slice(st+1);
num=Math.pow(num,mu);
}
returnnum;
}
}
//删除无用的符号
privatefunctionduseless(){
if(value.substr(-1)=="."){
value=value.slice(0,-1);
}
}
//改变数制
privatefunctionchangeS(n:Number){
value=parseInt2(value,systems,n);
systems=n;
CounterMessage("SystemChange");
isnew=true;
}
//进制转化换
functionparseInt2(s:String,from:Number,to:Number):String{
if(from==10){
returnNumber(s).toString(to).toUpperCase();
}else{
returnparseInt(s,from).toString(to).toUpperCase();
}
}
//角度转化为弧度
functiondtr(angle:Number){
returnangle*(Math.PI/180);
}
//弧度转化为角度
functionrtd(angle:Number){
returnangle*(180/Math.PI);
}
//数字分组
privatefunctiongroup(){
output=value;
if(grouping){
if(output.indexOf("e")==-1){
if(systems==10){
varsign=",";
varn:Number=3;
}else{
varsign="";
varn:Number=4;
}
if(output!="0"){
if(output.indexOf(".")!=-1){
varnum=output.indexOf(".");
}else{
varnum=output.length;
}
for(vari=num-n;i>0;i-=n){
if(output.slice(0,i)!="-"){
output=output.slice(0,i).concat(sign,output.slice(i));
}
}
}
}
}
}
//化成科学记数法
functionChangetoE(n:Number){
if(n>=1){
if(String(n).length<16){
varnz=Math.floor(n);
varnx=String(n).slice(String(nz).length+1);
nx=Rtrim(nx,"0");
varns=String(nz).split("");
varnsp=ns[0]+".";
for(vari=1;i if(nx==0){ if(ns[i]==0){ vardel=true; for(varj=i;j0.00001){ varns=String(n).split(""); varnt=0; for(vari=2;i if(Number(ns[i])==0){ nt++; }else{ break; } } varnz=String(n).substr(nt+2,1); varnx=String(n).substr(nt+3); if(nx!=""){ returnString(nz+"."+nx+"e-"+(nt+1)); }else{ returnString(nz+"e-"+(nt+1)); } }else{ returnn; } } } //化成普通数 functionChangetoF(n:Number){ varns=String(n); if(ns.indexOf("e")==-1){ returnn; }else{ varnss=ns.split("e"); varnz=nss[0]; varnx=nss[1]; if(nz.indexOf(".")==-1){ for(vari=0;i nz+="0"; } }else{ varnzs=nz.split("."); varnzz=nzs[0]; if(nzs[1].length<=Number(nx)){ for(vari=0;i=0;i--){ if(ss[i]==d){ if(i+1==ss.length){ ss.pop(); } } } returnss.join(""); }else{ returnn; } } //*************************************************************************** //监听键盘用 functiononKeyDown(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(); } } //监听器用 functionaddListener(Ob:Object){ _listeners.push(Ob); } functionremoveListener(Ob:Object){ for(vari=0;i<_listeners.length;i++){ if(_listeners[i]==Ob){ _listeners.splice(i,1); } } } functionbroadcastMessage(){ for(vari=0;i=2&&n<=36){ changeS(n); } } functiongetSystem():Number{ returnsystems; } functionsetunit(n:String){ setUnit(n); } functiongetunit():String{ returngetUnit(); } functionsetUnit(n:String){ if(n=="radian"){ units=1; }elseif(n=="degree"){ units=0; } } functiongetUnit():String{ varn:String=""; if(units=1){ n=="radian"; }elseif(units=0){ n=="degree"; } returnn; } functiongethasBracket():Boolean{ returngethasBracket(); } functiongethasBracket():Boolean{ return(inbracket.length!=0); } functiongetbracketNum():Number{ returngetBracketNum(); } functiongetBracketNum():Number{ returninbracket.length; } functiongethasData():Boolean{ returngethasData(); } functiongethasData():Boolean{ return(data!=undefined); } functiongetn():Number{ returngetN(); } functiongetN():Number{ returndata.length; } } //End 运算的关键是calculate()和evals()。前者是把算式合理拆分,后者负责计算只包含乘,除和幂的字符串。然后在由calculate()计算加,减,取模,这就实现了按运算法则运算。希望能帮忙再改进一下。 还有,里面的阶乘(factorial()函数)希望会的同志改一下,现在只能算整数,最好整数,小数通吃。顺便问一下,梯度是什么?怎么换算?我希望能做出比Windows自带的计算器更好的计算器,至少功能要同样丰富。 as文件:
点击浏览该文件

