这个的副本。
在 Flex/AS3 中,您将使用什么来在数字左侧填充零?
是否有等效printf
或NumberFormat
这样做的?
我正在寻找最好的实现或类似的东西:
public function zeroPad(number:int, width:int):String {
// number = 46, width = 4 would return "0046"
}
这个的副本。
在 Flex/AS3 中,您将使用什么来在数字左侧填充零?
是否有等效printf
或NumberFormat
这样做的?
我正在寻找最好的实现或类似的东西:
public function zeroPad(number:int, width:int):String {
// number = 46, width = 4 would return "0046"
}
public function zeroPad(number:int, width:int):String {
var ret:String = ""+number;
while( ret.length < width )
ret="0" + ret;
return ret;
}
性能方面,我更喜欢使用 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;
}
}
}
与将字符串逐个数多次扩展的性能缺点相比,字符串常量的足迹非常小。在大多数情况下(本例中最多 40 个零),所有调用的指令数都是相同的。
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;
}
零填充例程(AS2)的非常简短的示例......
Convert = function(Minutes) {
return ('00'+String(int(Minutes/60)%24)).substr(-2,2);
}
我确实在 AS3 中维护了一个 printf:不幸的是堆栈溢出不会让我发布链接,但是如果谷歌代码的项目名称是 printf-as3
随时欢迎反馈。
--
/**
* 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;
}
}
}
一个非常紧凑的解决方案:
public function zeroPad(s:String,pad:int):String {
for(;s.length<pad;s='0'+s);
return s;
}