数学の対数関数(log)を復習したのでメモ
/** * 必要な桁数まで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; }数値の先頭に0を追加して桁をあわせる関数がバグっていたので修正。 - うなの日記
これを理解する為に、今はすっかり忘れた高校数学を思い出さないといけませんでした。
また忘れた時に思い出せるように、メモしておきます。
logなんて社会にでたらつかわねーよとか思っていた時期が自分にもありました・・・
常用対数を使った桁の求め方
という事で、桁を調べたい数の常用対数の、小数点以下を切り上げた数値が、桁数になります。
Javascriptの対数関数
しかし、JavascriptのMath.log()は、下記の様に自然対数を返すメソッドです。
Math.log(3) :
逆に、Math.log( number )に掛けられているMath.LOG10Eは、下記の様にeの常用対数です。*1
Math.LOG10E :
つまるところ
細かくは忘れましたが、これが成り立ちます。
var s = Math.log(y) * Math.LOG10E;
つまりvar sにはyの常用対数が代入されます。
念のため、Google電卓で確認してみました。
http://www.google.com/search?q=ln2*log%28e%29
http://www.google.com/search?q=log2
少し修正*2
/** * 必要な桁数まで0を埋める。 * @param number 桁数 * @param size 桁数 */ function zerofill( number, size ) { if ( number < 0 ) throw "illegal argument."; var s = number != 0 ? Math.log( number ) * Math.LOG10E : 0; var i, str; for( i=1,n=size-s,str="";i<n;i++ ) str += "0"; return str+number; }
ゼロフィルしたくて使ってたら、i
とstr
がグローバルを汚染してたので、ちょっとだけ修正しました。ついでに関数名とインデントを自分の好みに合わせたり。