<script>
function sprintf(){
for(i=1;i<=arguments.length;i++)
arguments[0]=arguments[0].replace("%s",arguments[i]);
return arguments[0];
}
str=sprintf("%s好,%s","早上","王海")
alert(str);
</script>
function sprintf(){
for(i=1;i<=arguments.length;i++)
arguments[0]=arguments[0].replace("%s",arguments[i]);
return arguments[0];
}
str=sprintf("%s好,%s","早上","王海")
alert(str);
</script>
<script>
function vsprintf() {
for(var i = 0;i < arguments.length; i ++) {
document.body.innerHTML += arguments[i];
}
}
vsprintf("haha", " dfksdlfj", 3, true, "fkdl");
</script>
</body>
好象只能处理字符串参数(%s),象其他的%d,%f,%x,%u等呢?
javascript本身的字符串功能比C语言的sprintf之类强得多
一堆加号比用一个sprintf,两个括号,还有一堆逗号,哪个更方便?
javascript 用
numObj.toFixed
numObj.toPrecision
控制浮点数显示格式%x:
numObj.toString(16)例如:(3).toFixed(7) 显示 3.0000000
(123456789).toPrecision(3) 显示 1.23e+8
'0x'+(33).toString(16) 显示 0x21
一堆加号把一个完整的句子拆开,比如:
"This is"+A+"'s "+B+", it is "+C...
你认为很好阅读吗?用的引号,加号加起来比一对括号和逗号还要多。
上面的句子有6个引号,5个加号。而
sprintf("This is %s's %s, it is %s",A,B,C)
相比起来,是不是要要看一些呢?
我现在知道完整的实现C中sprintf中的功能有些难度,不过,你能不能把你的那段程序改一下,添加%3.2f和%x之类的功能呢?%d,%u和对齐方式就算了。
function sprintf(){
/**********(qiushuiwuhen 2002-8-23)*************/
if(ret=arguments[0]){
var reg=/%(-)?(\d+)?\.?(\d+)?(\w)/g;
var i=0,l=0;
while(arr=reg.exec(ret)){
if(++i>arguments.length)return null;
switch(arr[4]){
case "x":tmp=arguments[i].toString(16);break;
case "f":if(arr[3]){tmp=arguments[i].toFixed(arr[3]);break;}
case "s":
case "d":
default:tmp=arguments[i].toString();
}
if((l=Number(arr[2])-tmp.length)>0)tmp=arr[1]?tmp+new Array(l+1).join(" "):new Array(l+1).join(" ")+tmp;
ret=ret.replace(arr[0],tmp);
}
return ret;
}
return null;
}
str=sprintf("%s,你的代号:%2d(%5x),测试格式:%-8.3f-%5.1f","秋水无恨",31415,31415,3.1415,3.1415)
alert(str);
</script>