我刚写了这个令人难以置信的冗长代码,将2之类的数字转换成02. 你能否缩短这个功能,请(保留功能)?
public static function format(n:int, minimumLength:int):String {
var retVal:String = n.toString();
var stillNeed:int = minimumLength - retVal.length;
for (var i:int = 0; i < stillNeed; i++) {
retVal = "0" + retVal;
}
return retVal;
}
请使用变量类型。如果已经有一个我不知道的内置功能,那么额外的积分(良好的氛围点,而不是SO点)。
如果有人想用其他语言发布一些极短的等价物,那也很有趣。
答案 0 :(得分:4)
我认为没有内置方式,但这可能更清晰(如果不一定表现更好):
//20 zeroes, could be more if needed
public static var Zeroes:String = "00000000000000000000"
public static function format(n:Number, minimumLength:int):String {
var retVal:String = (n.toFixed(0)); // cut off the decimals
var stillNeed:int = minimumLength - retVal.length;
retVal = Zeroes.substring(0, stillNeed) + retVal;
return retVal;
}
“zeroes”var消除了循环的需要,只需从预构建的字符串中预先添加许多零。
答案 1 :(得分:4)
Christophe Herreman几乎是正确的,但他的方法增加了更多的零而不是差异量。我修了一下:
public static function format(n:int, minimumLength:int):String {
var v:String = n.toString();
var stillNeed:int = minimumLength - v.length;
return (stillNeed > 0) ? v : String(Math.pow(10, stillNeed) + v).substr(1);
}
我之前的尝试:
public static function format(n:int, minimumLength:int):String {
var stillNeed:int = minimumLength - n.toString().length;
return (n.split("").reverse().join("") as int) // 32 -> 23
*Math.pow(10, stillNeed > 0 ? stillNeed : 0).toString() // 23000
.split("").reverse().join(""); // 00032
}
public static function formatAny(n:Number, minimumLength:int):String {
return format((int)n) + n.toString().split('.')[ 1 ];
}
// use this if you want to handle -ve numbers as well
public static function formatAny(n:Number, minimumLength:int):String {
return (n < 0 ? '-' : '') + formatAny(n, minimumLength);
}
答案 2 :(得分:4)
这不是最快的实现(它做了一些不必要的复制并且有一个循环),但 很好且可读:
public static function pad(num:int, minLength:uint):String {
var str:String = num.toString();
while (str.length < minLength) str = "0" + str;
return str;
}
答案 3 :(得分:3)
这个怎么样:
public static function format(n:int, len:int):String {
var v:String = n.toString();
return (v.length >= len) ? v : String(Math.pow(10, len) + n).substr(1);
}
btw没有内置功能。如果你需要不错的填充函数,请查看Apache Commons Lang中的StringUtils。
答案 4 :(得分:2)
道德以及所有在这里做出回应的其他人,但显然人们在没有实际尝试代码的情况下进行投票。
dirkgently的最终功能大多是正确的,但他的'&gt;'需要是'&lt;'。
此功能可根据需要执行(相当彻底地测试):
public static function format(n:int, minimumLength:int):String {
var v:String = n.toString();
var stillNeed:int = minimumLength - v.length;
return (stillNeed < 0) ? v : String(Math.pow(10, stillNeed) + v).substr(1);
}
答案 5 :(得分:1)
“如果有人想张贴一些 在一些人中极短 其他语言,也很有趣。“
在javascript中很简单 - 将其粘贴到浏览器的地址栏
javascript:function zit(n,w){var z =“000000000000000000”; return(z + n).substr(-w);} alert(zit(567,9));空隙(0);
答案 6 :(得分:1)
我总是通过获取一个字符串来完成此操作,该字符串是包含全零的零的最大填充宽度,然后将该字符串添加到填充到零字符串的末尾,然后使用子字符串来获取右手长度数字。
类似的东西:
function pad(num:int, length:unit):String{
var big_padded:String "0000000000000000000000000000" + num.toString();
return big_padded.substring(big_padded.length - length);
}
答案 7 :(得分:1)
adobe推出的as3corelib包有一个很好的LittleFormatter类,它使用一系列STATIC类。在这种情况下,您可以使用addLeadingZero函数。
//The following method is from the NumberFormatter class of the as3corelib package by Adobe.
public static function addLeadingZero(n:Number):String
{
var out:String = String(n);
if(n < 10 && n > -1)
{
out = "0" + out;
}
return out;
}
我包含该函数只是为了表明它的简单性,但我会使用该包而不是通过yoinking函数,因为它提供了许多其他有用的功能,如StringUtils,加密方法,如MD5,河豚等。
您可以下载包here 对于较新的用户,您必须提供此程序包所在位置的类路径。导入类而不是使用完全限定的类名也很聪明。
答案 8 :(得分:0)
private function leadingZeros(value:int, numDigits:int):String
{
return String(new Array(numDigits + 1).join("0") + String(value)).substr(-numDigits, numDigits);
}