this一个。
你会用什么来填充Flex / AS3中数字左边的零?
是否有相同的printf
或NumberFormat
来执行此操作?
我正在寻找这个或类似的最好的实现:
public function zeroPad(number:int, width:int):String {
// number = 46, width = 4 would return "0046"
}
答案 0 :(得分:26)
public function zeroPad(number:int, width:int):String {
var ret:String = ""+number;
while( ret.length < width )
ret="0" + ret;
return ret;
}
答案 1 :(得分:3)
在性能方面,我更喜欢使用String常量和substr,如下所示:
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;
}
}
}
与将字符串逐一延伸多次的性能缺点相比,String常量的脚印非常小。在大多数情况下(在此示例中最多40个零),所有呼叫的指令数相同。
答案 2 :(得分:2)
public function zeroPad (number:String, width:int):String {
if (number.length < width)
return "0" + zeroPad(number, width-1);
return number;
}
我不知道它在AS3上的性能,但它确实看起来更酷! : - )
答案 3 :(得分: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;
}
答案 4 :(得分:1)
零填充例程(AS2)的非常简短的例子......
Convert = function(Minutes) {
return ('00'+String(int(Minutes/60)%24)).substr(-2,2);
}
答案 5 :(得分:0)
我在AS3中维护了一个printf: 不幸的是,堆栈溢出不会让我发布链接,但如果谷歌代码的项目名称是printf-as3
随时欢迎反馈。
-
答案 6 :(得分: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;
}
}
}
答案 7 :(得分:0)
非常紧凑的解决方案:
public function zeroPad(s:String,pad:int):String {
for(;s.length<pad;s='0'+s);
return s;
}