SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.10<<123456789101112131415161718192021222324252627282930>>2017.12
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

久々の投稿(^^;

タイトルの通り。ちょっと作ってみた。・・・でも、毎度のごとく適当に作っているので使うときはご用心(^^;
String.prototype.sprintf = function()
{
var num, exp;
var args = arguments;
var n = 0;

return this.replace(/%([+\-# ]+)?([1-9][0-9]*)?(\.[1-9][0-9]*)?([diuxXoOfeEgGsc%])/g, function(whole,flag,width,prec,fmt) {
var str;

if( !flag ) flag="";
if( width ) width-=0;
if( prec ) prec = prec.substr(1)-0;

switch( fmt )
{
case 'd':
case 'i':
case 'u':
num = args[n]-0;
if( fmt=='u' && num<0 ) num += Math.pow(65536,Math.floor(Math.log(Math.abs(num))/Math.log(65536))+1);

str = ""+num;
if ( flag.indexOf("+")>=0 && num>=0 ) str="+"+str;
else if( flag.indexOf(" ")>=0 && num>=0 ) str=" "+str;

if( width && flag.indexOf("0")>=0 ) while(str.length<width) str=str.replace(/([0-9]+)/,"0$1");
break;

case 'x':
case 'X':
var hex = fmt=="x" ? "0123456789abcdef" : "0123456789ABCDEF";
num = args[n]-0;
if( num<0 ) num += Math.pow(65536,Math.floor(Math.log(Math.abs(num))/Math.log(65536))+1);

for(str="";num>0 || str=="";num=Math.floor(num/16)) str = hex.charAt(num % 16) + str;
if( width && (args[n]-0)<0 ) while(str.length<width) str=hex.charAt(15)+str;
if( width && flag.indexOf("0")>=0 ) while(str.length<width) str="0"+str;
break;

case 'o':
case 'O':
num = args[n]-0;
if( num<0 ) num += Math.pow(4096,Math.floor(Math.log(Math.abs(num))/Math.log(4096))+1);

for(str="";num>0 || str=="";num=Math.floor(num/8)) str = (num%8) + str;
if( width && (args[0]-0)<0 ) while(str.length<width) str="7"+str;
if( width && flag.indexOf("0")>=0 ) while(str.length<width) str="0"+str;
break;

case 'e':
case 'E':
num = args[n]-0;
exp = Math.floor(Math.log(Math.abs(num))/Math.LN10);
num /= Math.pow(10,exp);
if( exp>=0 ) exp = "+"+exp;
exp = fmt + exp;
case 'f':
if( fmt=="f" ) { num = args[n]-0; exp = "" };
if( prec )
{
for(var i=0;i<prec;i++) num*=10;
str = ""+Math.floor(num+0.5);
if( prec>0 ) str = str.substr(0,str.length-prec)+"."+str.substr(str.length-prec,prec);
}
else
str = ""+num;

if ( flag.indexOf("+")>=0 && num>=0 ) str="+"+str;
else if( flag.indexOf(" ")>=0 && num>=0 ) str=" "+str;
str += exp;

break;

case 'g':
case 'G':
var cand1 = whole.replace(/g$/,fmt=="g"?"e":"E");
var cand2 = whole.replace(/g$/,"f");
var str1 = cand1.sprintf(args[n]);
var str2 = cand2.sprintf(args[n]);
str = str1.length < str2.length ? str1 : str2;
break;

case 's':
str = ""+args[n];
break;

case 'c':
if( typeof(args[n])=="number" )
str = String.fromCharCode(args[n]);
else if( typeof(args[n])=="string" )
str = args[n].charAt(0);
else
str = "?";
break;

case '%':
str = "%";
break;
}
if( width )
{
if( flag.indexOf("-")>=0 ) { while( str.length < width ) str+=" "; }
else { while( str.length < width ) str=" "+str; }
}
n++;
return str;
});
};


テーマ:JavaScript(ジャバスクリプト) - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。