AS3.0超大整數 加減乘除 工具類

package anUtil.Util
{
import flash.display.Sprite;



public  class BigIntUtil extends Sprite
{

private var Fristarray:Array=new Array();
private var Secondarray:Array=new Array();
//萬爲單位        萬,億,萬億,兆,萬兆 ,億兆,萬憶兆,京                             9/9999/9999/9999/9999/9999/9999/9999/9999

/**
*精確到千萬位 
*/
//array:Array,array2:Array
public function BigIntUtil()
{
// Fristarray=array;
// Secondarray=array2;
// Fristarray=ToArray("10");
// trace("============");
// Secondarray=ToArray("0.1030");
// var threearray:Array=jian(Fristarray,Secondarray);
// trace(ArrayToString(threearray));
}
/**
*把字符串類型的數字轉換成數組 
*/
public static  function ToArray(number:String):Array
{   
//0,位數,1,小數,2 ,到千,3到千萬,4到,
if(number){
trace("number",number);
var a:Array=number.split(".",10);
trace("a",a[0],a[1]);
var s:String=a[0];
var j:int=s.length;
var b:Array=new Array();
if(!a[1])a.push(0);
trace(a,s,j);
b.push(j);
b.push("0."+a[1]);
trace(a,s,j,b);
do{
if(j<8)
{
var ss:String;
ss=s.substr (0,j);
b.push(ss);
j=0;
}
else{
    j-=8;
       var sss:String;
       sss=s.substr (j,8);
b.push(sss);
trace(sss,"sss");
      }
   }

while(j>0);
return b;
}
else{
var b2:Array=new Array();
b2.push(0);
b2.push(0);
b2.push(0);
return b2;
}
}

/**
*把數組轉換成字符串
*/
public static  function ArrayToString(array:Array):String{
var s:String="";
trace("array.length",array.length);
for(var c:int=array.length-1;c>1;c--)
{
if(array[c].length>8)
{
array[c]=array[c].slice(1);
}
s+=array[c];
trace("s",s);
}
if(array[1])
{
if(array[1]==0){s+=".0000"; }
else{
var a:Array=array[1].split(".",10);
s+="."+a[1];
 
}
}
return s;
}

/**
*任意兩組規定格式的數組相加,可以通過ToString()方法取得
* 數組第一位爲數字長度
* 數組第二位爲小數
*/
public static  function jia(beijiashu:Array,jiashu:Array):Array
{
   var blen:Number=beijiashu[0];
var jlen:Number=jiashu[0];
var one:Array=new Array();
var two:Array=new Array();
var three:Array=new Array();
if(blen>jlen&&blen>8)
{
for(var i0:int=blen-jlen;i>0;i0-=8)
{
jiashu.push("00000000");
}
}
else if(jlen>blen&&jlen>8)
{
for(var i:int=jlen-blen;i>0;i-=8)
{
beijiashu.push("00000000");
}
}
for(var ii:int=1;ii<beijiashu.length;ii++)
{
var kk:Number=Number(beijiashu[ii]);
   one.push(kk);
}
for(var iii:int=1;iii<jiashu.length;iii++)
{ 
var qqc:Number=Number(jiashu[iii]);
two.push(qqc);
}
if(one.length>two.length){
for(var k:int=0;k<one.length;k++)
{
if(two[k]){
var  sum:Number=one[k]+two[k];
   three.push(sum);
}
else{
var  sum2:Number=one[k];
three.push(sum2);
}
}
}
else{
for(var k2:int=0;k2<two.length;k2++)
{
if(one[k2]){
var  sum3:Number=one[k2]+two[k2];
three.push(sum3);
}
else{
var  sum4:Number=two[k2];
three.push(sum4);
}
}
}
 
// trace(one[0]+" "+two[0]);
if(three[0]>=1)
{
three[1]+=1;
three[0]-=1;
}
var aa:Array=String(three[0]).split(".");
// trace(aa+"aaaa");
var ss:String=String(three[0]).slice(0,6);
// trace(ss+" ss");
three[0]=int(ss);
// trace(three+"three");
for(var x:int=1;x<three.length;x++)
{
if(three[x]>=100000000)
{
if(!three[x+1])
{
three.push(1);
 three[x]-=100000000;
}
else{
three[x+1]++;
    three[x]-=100000000;
}
}
}
var four:Array=new Array();
four[0]=three.length;
for(var q:int=1;q<three.length+1;q++)
{  var sss:String=""
for(var qq:int=7;qq>0;qq--){
if(Math.pow(10,qq)/three[q-1]>=1)
    {     
          sss+="0";
      }
else{break;}
}
var s:String="";
s=sss+String(three[q-1]);
     if(!four[q]){
//  trace(s);
 four.push(s)}
 else{four[q]=s;}
 
   }
// trace(four,"four");
cleanZero(four);
return four;
}

/**
*需要使用規定格式的數組,可以通過ToString()方法取得
*被減數必須大於減數 
* 數組第一位爲數字長度
* 數組第二位爲小數
*/
public  static function jian(beijianshu:Array,jianshu:Array):Array
{
var blen:Number=beijianshu[0];
var jlen:Number=jianshu[0];
var one:Array=new Array();
var two:Array=new Array();
var three:Array=new Array();

for(var i:int=blen-jlen;i>0;i-=8)
{
jianshu.push("00000000");
}

for(var ii:int=1;ii<beijianshu.length;ii++)
{
var kk:Number=Number(beijianshu[ii]);
one.push(kk);
}
for(var iii:int=1;iii<jianshu.length;iii++)
{ var qqb:Number=Number(jianshu[iii])
two.push(qqb);
}
if(one.length>two.length){
for(var k:int=0;k<one.length;k++)
{
if(two[k]){
var  sum:Number=one[k]-two[k];
three.push(sum);
}
else{
var  sum2:Number=one[k];
three.push(sum2);
}
}
}
else{
for(var k2:int=0;k2<two.length;k2++)
{
if(one[k2]){
var  sum3:Number=one[k2]-two[k2];
three.push(sum3);
}
else{
var  sum4:Number=two[k2];
three.push(sum4);
}
}
}
if(three[0]<0)
{
three[1]-=1;
three[0]+=1;
}
for(var x:int=1;x<three.length;x++)
{
if(three[x]<0)
{
three[x]+=100000000;
three[x+1]-=1;
}
}


var four:Array=new Array();
four[0]=three.length;
for(var qa:int=1;qa<three.length+1;qa++)
{  var ss:String=""

for(var qqa:int=7;qqa>0;qqa--){
if(Math.pow(10,qqa)/three[qa-1]>=1)
{     
ss+="0";
}
else{break;}
}
var s:String="";
s=ss+String(three[qa-1]);
if(!four[qa]){
four.push(s)}
else{four[qa]=s;}
}

cleanZero(four);
return four;
}
/**
* 需要使用規定格式的數組,可以通過ToString()方法取 得
* 乘數必須沒有小數,即>=1
* 數組第一位爲數字長度
* 數組第二位爲小數
*/
public static  function cheng(beichengshu:Array,chengshu:Array):Array
{
var i:Array=chengshu;
var sum:Array=beichengshu;
var k:Array=ToArray("1");
   while(true)
{  

 sum=jia(sum,beichengshu);
 i=jian(i,k);
 if(int(ArrayToString(i))==1)
 {
 break;
 }
}

cleanZero(sum);
return sum;
}
/**
* 需要使用規定格式的數組,可以通過ToString()方法取得
* 除數必須沒有小數,即>=1
* 只返回商,不返回餘數
* 數組第一位爲數字長度
* 數組第二位爲小數
*/
public static  function chu(beichushu:Array,chushu:Array):Array
{
var i:Array=chushu;
var sum:Array=beichushu;
var k:Array=ToArray("1");
var c:Array=ToArray("0");
while(true)
{  
if(int(ArrayToString(sum))<int(ArrayToString(chushu)))
{break;}
sum=jian(sum,chushu);
c=jia(c,k);
if(int(ArrayToString(sum))<=0)
{
break;
}
}

cleanZero(c);
return c;
}
/**
*把前面的零全部清除 
*/
public static  function cleanZero(array:Array):Array
{
for(var i:int=array.length;i>1;i--)
{
var k:int=0;
k=int(array[i]);
if(k>0)
{
array[i]=String(k);
break;
}
else{
array.splice(i);
array[0]-=1;
}
}
return array;
}
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章