読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

数値の先頭に0を追加して桁をあわせる関数がバグっていたので修正。

この間作成した数値の先頭に0を追加して桁をあわせる関数がバグっていたので修正。「Math.log(0)」って-Infinityを返すのね・・・orz。あと負数の場合もNaNになるのか。

Math.log( 0 ) // -Infinity
Math.log( -1 )  // NaN
Math.log( -100 ) // NaN

ということで、関数に条件判定を追加。

/**
 * 必要な桁数まで0を埋める。
 * @param number 桁数
 * @param size 桁数
 */
function fillZero( number, size ) {
  if ( number < 0 ) throw "illegal argument.";
  var s = number != 0 ? Math.log( number ) * Math.LOG10E : 0;
  for( i=1,n=size-s,str="";i<n;i++ ) str += "0";
  return str+number;
}

サンプル。

var out = document.getElementById("out");
out.innerHTML += "3, 1 : " +  fillZero( 3, 1 ) + "<br/>";
out.innerHTML += "3, 2 : " +  fillZero( 3, 2 ) + "<br/>";
out.innerHTML += "3, 3 : " +  fillZero( 3, 3 ) + "<br/>";
out.innerHTML += "23, 3 : " +  fillZero( 23, 3 ) + "<br/>";
out.innerHTML += "123, 3 : " +  fillZero( 123, 3 ) + "<br/>";
out.innerHTML += "1234, 3 : " +  fillZero( 1234, 3 ) + "<br/>";
out.innerHTML += "3.2, 2 : " +  fillZero( 3.2, 2 ) + "<br/>";

out.innerHTML += "0, 1 : " +  fillZero( 0, 1 ) + "<br/>";
out.innerHTML += "0, 2 : " +  fillZero( 0, 2 ) + "<br/>";
out.innerHTML += "0, 3 : " +  fillZero( 0, 3 ) + "<br/>";

try {
  fillZero( -3, 2 );
} catch ( ex ) {
  out.innerHTML += "-3, 2 : illegal argument.<br/>";
}

try {
  fillZero( -10, 2 );
} catch ( ex ) {
  out.innerHTML += "-10, 2 : illegal argument.<br/>";
}

実行結果はこちら