2013-03-08 2 views

ответ

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(). Replace ("-", "");

// это удаление zeors старта

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

// десятичный или не

/// показатель равен нулю

  if(exponentNum==0) 
      return finalNum; 

// если Num десятичный , если (isDecimal) { вар expDiff: Кол-во;

   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; 

// Если ехр разность больше нуля Соединить нули

   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; 

       } 

// Если ехр разность меньше нуля, чем двигаться. (Точка) между числом

   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(); 
     } 
+0

Проверено моей QA команда работает отлично в заявке. – AsadYarKhan

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. Первый и последний будут также форматировать номер, специфичный для локали пользователя (используйте запятую вместо периодов, где это необходимо, и т. Д.).

Ниже приведены ссылки на документацию:

+0

Это решение неприемлемо. – AsadYarKhan

+0

@AsadYarKhan Привет, я смущен :) Вы приняли это как ответ, но это неприемлемо? Вы можете указать, почему он не соответствует вашим потребностям, и добавить это к вашему вопросу, если это важно. Честно говоря, ваш вопрос расплывчатый и не указывает никаких требований. Кроме того, это стандартные классы форматирования номера из Adobe. Приятно, что у вас есть более благоприятное решение, но другие должны знать, что уже доступно. Вы можете не согласиться с этим и принять свой ответ, кстати, если вы это сделаете, пожалуйста, уточните, какие различия существуют, чтобы другие могли извлечь выгоду. –

+0

и ошибка функции to.Fixed() с большим десятичным значением. :( – AsadYarKhan

 Смежные вопросы

  • Нет связанных вопросов^_^