繁体中文
设为首页
加入收藏
当前位置:网站制作首页 >> Flash教程 >> 计算器,按照运算法则运算

计算器,按照运算法则运算

2007-10-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介: 点击浏览该文件 http://www.Flash8.net/bbs/UploadFile/2005-2/200521317347540.swf 这是我做的一个,模仿Windows自带的计算器,支持快捷键,进制转换。尤其是按运算法则运算(到现在,我也没见过这么好的Flash...
关键字:运算 计算器 法则

点击浏览该文件

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文件:

点击浏览该文件

责任编辑:admin
相关文章