如何在Adobe Flex3中将指数编号转换为固定的十进制数

时间:2013-03-08 05:09:40

标签: flex flex3

如何将指数转换为固定小数。 例如:2.5e12,0.12323e-11等

2 个答案:

答案 0 :(得分:1)

在Flash / Flex中,您可以使用其中一个NumberFormatter类。以下是使用Flex 3(MX)NumberFormatter的示例。看看每个API提供的文档,它们彼此有点不同。

var n:Number = 3 * .0000000001;
trace(n); // 3e-10
var f:NumberFormatter = new NumberFormatter();
f.precision=10;
trace(f.format(n)); // 0.0000000003

有3个NumberFormatter类,一个用于纯Flash(非Flex),一个用于Flex 3,另一个用于Flex 4版本。第一个和最后一个也将格式化特定于用户区域设置的数字(在适当的情况下使用逗号代替句点等)。

以下是文档链接:

答案 1 :(得分:0)

public function formatIntoFixedValue(value:Object):Object
            {
                var isNegativeNum:Boolean ;
                var isNegativeExp:Boolean;
                var isDecimal:Boolean;
                var splitNums:Array;
                var splitFixedNum:Array;
                var leftDecPlaceCount:Number=0;
                var rightDecPlaceCount:Number=0;
                var exponentNum=0;
                var finalNum:String;
                var valueNum:Number=Number(value);
                var valueStr:String = valueNum.toString();
  

//不是指数返回

            if(valueStr.indexOf("e")<0)
            return valueStr;

            if(valueNum<0)
  

//数字是否定为

                isNegativeNum=true;
            else
                isNegativeNum=false;

            splitFixedNum= valueStr.split("e");

            if(Number(splitFixedNum[1])<0)
  

//指数为负数

                isNegativeExp=true;
            else 
                isNegativeExp=false;

            exponentNum=Math.abs(Number(splitFixedNum[1]));//-7
  

//删除空格
                  splitFixedNum [0] = StringUtil.trimArrayElements(splitFixedNum [0], “”);

     

//如果存在则从开始删除减号。                   splitFixedNum [0] = splitFixedNum [0]的ToString()替换( “ - ”, “”);

     

//它正在删除开始的

            finalNum=Number(splitFixedNum[0]).toString(); 
  

//是十进制还是不是

            if(finalNum.toString().indexOf(".")>=0)
            {
            isDecimal=true;
            }
            else 
            isDecimal=false;
  

///指数为零

            if(exponentNum==0)
            return finalNum;
  

//如果num是十进制                   如果(isDecimal)                   {                       var expDiff:Number;

                splitNums= String(splitFixedNum[0]).split(".");

                splitNums[0]=Number(splitNums[0]).toString();
                if(splitNums[0]!="0")
                {



                finalNum=splitNums[0].toString().concat(splitNums[1]); 
                leftDecPlaceCount=splitNums[0].toString().length;

                }
                else
                {



                finalNum=splitNums[1]; 
                leftDecPlaceCount=0;
                }


                rightDecPlaceCount=splitNums[1].toString().length;

                if(isNegativeExp)
                    expDiff=exponentNum-leftDecPlaceCount;

                else
                    expDiff=exponentNum-rightDecPlaceCount;
  

//如果exp diff大于零连接零

                if(expDiff>0)
                {
                        var zeros:String="";

                        for(var i:Number=0;i<expDiff;i++)
                            zeros+="0";

                        if(isNegativeExp)   
                        finalNum="0."+zeros+finalNum;
                        else
                        finalNum= finalNum+zeros;   

                }
  

//如果exp diff小于零,则在数字

之间移动。(点)
                else if(expDiff<0)
                {
                    var s:String;
                    expDiff= Math.abs(expDiff);
                    if(isNegativeExp)
                    s =finalNum.substr(0,expDiff)+"."+finalNum.substr(expDiff,finalNum.length);
                    else
                    s =finalNum.substr(0,(leftDecPlaceCount+rightDecPlaceCount)-expDiff)+"."+finalNum.substr((leftDecPlaceCount+rightDecPlaceCount)-expDiff,finalNum.length);
                    finalNum=s;
                }
                else
                {
                    if(isNegativeExp)
                    finalNum= "0."+finalNum;

                }
            }
            else
            {

                        var zeros:String="";

                        for(var i:Number=0;i<exponentNum-finalNum.length;i++)
                            zeros+="0";

                        if(isNegativeExp)   
                        finalNum="0."+zeros+finalNum;
                        else
                        finalNum= finalNum+zeros;
            }   

            if(isNegativeNum)
            finalNum ="-"+ finalNum;

            return finalNum.toString();
        }