2009-03-20 11 views
10

this एक का डुप्लिकेट।फ्लेक्स/एएस 3 में शून्य पैड के लिए आप क्या उपयोग करेंगे?

फ्लेक्स/एएस 3 में किसी संख्या के बाईं ओर पैड शून्य का उपयोग करने के लिए आप क्या उपयोग करेंगे?

क्या printf या NumberFormat के बराबर है जो यह करता है?

मैं इस या कुछ इसी तरह का सबसे अच्छा कार्यान्वयन के लिए देख रहा हूँ:

public function zeroPad(number:int, width:int):String { 
    // number = 46, width = 4 would return "0046" 
} 
+0

बंद करने के लिए वोटिंग। – dirkgently

+1

यह वास्तव में एक डुप्लिकेट है हालांकि मुझे इसे खोज इंजन के साथ कभी नहीं मिला क्योंकि यह शून्य, पैडिंग, संख्या बनाने के बारे में बात नहीं करता है और शीर्षक में रूबी की तरह शब्द है। – lpfavreau

+0

हां, यह दुर्भाग्यपूर्ण है। आशा है कि आपकी परेशानी अब हल हो गई है। – dirkgently

उत्तर

26
public function zeroPad(number:int, width:int):String { 
    var ret:String = ""+number; 
    while(ret.length < width) 
     ret="0" + ret; 
    return ret; 
} 
+0

+1 महान काम करता है! – brenjt

0

मैं AS3 में एक printf बनाए रखने के कार्य करें: दुर्भाग्य से ढेर अतिप्रवाह मुझे लिंक पोस्ट नहीं दूँगा, लेकिन अगर गूगल कोड का प्रोजेक्ट नाम printf-as3

प्रतिक्रिया हमेशा स्वागत है।

- एक सुरुचिपूर्ण recursion रूप

http://code.google.com/p/printf-as3/

0
/** 
* originally by Chris Agiasotis @ http://agitatedobserver.com/as3-currency-formatter/ 
* improved by Joseph Balderson @ http://www.joeflash.ca 
*/ 
package 
{ 
    public class CurrencyFormat 
    { 
     public function CurrencyFormat(){ } 

     public function getCurrency(num:Number, 
        decimalSeparator:String=".", 
        decimalPlace:Number=2, 
        currency:String="$", 
        thousandsSeparator:String="," 
       ):String 
     { 
      //assigns true boolean value to neg in number less than 0 
      var neg:Boolean = (num < 0); 

      //make the number positive for easy conversion 
      num = Math.abs(num) 

      var roundedAmount:String = String(num.toFixed(decimalPlace)); 

      //split string into array for dollars and cents 
      var amountArray:Array = roundedAmount.split("."); 
      var dollars:String = amountArray[0] 
      var cents:String = amountArray[1] 

      //create dollar amount 
      var dollarFinal:String = "" 
      var i:int = 0 
      for (i; i < dollars.length; i++) 
      { 
       if (i > 0 && (i % 3 == 0)) 
       { 
        dollarFinal = thousandsSeparator + dollarFinal; 
       } 

       dollarFinal = dollars.substr(-i -1, 1) + dollarFinal; 
      } 

      //create Cents amount and zeros if necessary 
      var centsFinal:String = String(cents); 

      var missingZeros:int = decimalPlace - centsFinal.length; 

      if (centsFinal.length < decimalPlace) 
      { 
       for (var j:int = 0; j < missingZeros; j++) 
       { 
        centsFinal += "0"; 
       } 
      } 

      var finalString:String = "" 

      if (neg) 
      { 
       finalString = "-"+currency + dollarFinal 
      } else 
      { 
       finalString = currency + dollarFinal 
      } 

      if(decimalPlace > 0) 
      { 
       finalString += decimalSeparator + centsFinal; 
      } 

      return finalString; 
     } 
    } 
} 
2

Phil's संस्करण:

public function zeroPad (number:String, width:int):String { 
    if (number.length < width) 
     return "0" + zeroPad(number, width-1); 
    return number; 
} 

मैं AS3 पर अपने प्रदर्शन के बारे में पता नहीं है, लेकिन यह यकीन है कि कूलर लग रहा है! :-)

+0

जब भी संभव हो तो रिकर्सन से बचा जाना चाहिए और यह लगभग हमेशा संभव है –

+1

@ इस मामले में स्टिंकबट, * रिकर्सन * अधिक समझ में आता है। मेरा मानना ​​है कि यह कुछ प्रोग्रामिंग पाठ्यक्रमों में पढ़ाया नहीं जाता है क्योंकि यह सहज ज्ञान युक्त नहीं है एक * लूप * के रूप में, और वास्तव में, यह एक लूप से अधिक सीमित है। लेकिन कह रहा है * जब भी संभव हो तो इसे टालना चाहिए * थोड़ा चरम है। मैं कहूंगा *** सावधानी के साथ रिकर्सन का उपयोग करें और इसे छोटा रखें ** *, क्योंकि यह किसी भी अच्छे कारण के लिए वास्तव में जटिल हो सकता है। – cregox

+0

कारण मैं कहता हूं कि जब आप रिकर्सन का उपयोग करते हैं तो स्टैक ओवरफ़्लो अधिक संभावना होती है - यह तुरंत स्पष्ट नहीं हो सकता है लेकिन लंबी अवधि में, आप अनजाने में ऐसी स्थिति बना सकते हैं जहां बहुत से डेटा के साथ-साथ कुछ डेटा रिकर्सिव विधियां आपके एप्लिकेशन या स्क्रिप्ट को घुटनों पर लाएंगी। –

1
public static function getFormatedValue(num:Number, roundDecimalPlace:Number=2, showLastZerosInDecimalPlaces:Boolean = false, decimalSeparator:String=".", thousandsSeparator:String=",", currency:String="$"):String 
{ 
    //assigns true boolean value to neg in number less than 0 
    var neg:Boolean = (num < 0); 

    //make the number positive for easy conversion 
    num = Math.abs(num) 

    var roundedAmount:String = String(num.toFixed(roundDecimalPlace)); 

    //split string into array for dollars and cents 
    var amountArray:Array = roundedAmount.split("."); 
    var dollars:String = amountArray[0] 
    var cents:String = amountArray[1] 

    //create dollar amount 
    var dollarFinal:String = "" 
    var i:int = 0 
    for (i; i < dollars.length; i++) 
    { 
    if (i > 0 && (i % 3 == 0)) 
    { 
     dollarFinal = thousandsSeparator + dollarFinal; 
    } 

    dollarFinal = dollars.substr(-i -1, 1) + dollarFinal; 
    }  

    //create Cents amount and zeros if necessary 
    var centsFinal:String; 

    if(showLastZerosInDecimalPlaces) 
    { 
    centsFinal = String(cents); 

    var missingZeros:int = roundDecimalPlace - centsFinal.length; 

    if (centsFinal.length < roundDecimalPlace) 
    { 
     for (var j:int = 0; j < missingZeros; j++) 
     { 
     centsFinal += "0"; 
     } 
    } 
    } 
    else 
    { 
    if(Number(cents) != 0) 
    { 
     centsFinal = String(String(Number("0."+cents)).split(".")[1]); 
    } 
    else 
    { 
     roundDecimalPlace = 0; 
    } 
    } 

    var finalString:String = "" 

    if (neg) 
    { 
    finalString = "-"+currency + dollarFinal 
    } else 
    { 
    finalString = currency + dollarFinal 
    } 

    if(roundDecimalPlace > 0) 
    { 
    finalString += decimalSeparator + centsFinal; 
    } 

    return finalString; 
} 
1

शून्य गद्दी दिनचर्या (AS2) ...

Convert = function(Minutes) { 
     return ('00'+String(int(Minutes/60)%24)).substr(-2,2); 
    } 
0

एक बहुत कॉम्पैक्ट समाधान के बहुत ही कम उदाहरण:

public function zeroPad(s:String,pad:int):String { 
    for(;s.length<pad;s='0'+s); 
    return s; 
} 
3

अभिनय की दृष्टि से, मैं एक का उपयोग करना पसंद स्ट्रिंग स्थिर और सबस्ट्रेट, इस तरह:

package { 
    public class Helper { 
     private static const _ZEROS:String = "0000000000000000000000000000000000000000"; // 40 zeros, shorten/expand as you wish 

     /* 
     * f: positive integer value 
     * z: maximum number of leading zeros of the numeric part (sign takes one extra digit) 
     */ 
     public static function uint_Zeropadded(f:uint, z:int = 0):String { 
      var result:String = f.toString(); 
      while (result.length < z) 
       result = _ZEROS.substr(0, z - result.length) + result; 
      return result; 
     } 
    } 
} 

स्ट्रिंग स्थिरांक में स्ट्रिंग एक को एक अंक से कई बार विस्तारित करने के प्रदर्शन ड्रॉ-बैक की तुलना में बहुत कम फुटस्टैम्प होता है। ज्यादातर मामलों में (इस उदाहरण में 40 शून्य तक) सभी कॉल के लिए निर्देशों की संख्या समान है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^