Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2008 May 15th Thursday

0で詰めるJavaScriptのベンチマーク

| 12:24 | 0で詰めるJavaScriptのベンチマーク - FFFF を含むブックマーク はてなブックマーク - 0で詰めるJavaScriptのベンチマーク - FFFF

先頭を0で埋めて桁をそろえる(解説付き) - 素人がプログラミングを勉強していたブログ "先頭を0で埋めて桁をそろえる" を考えてみた - Higé au laitに便乗。

というか、以前書いたものがあるので、ベンチ取ってみた。

http://ss-o.net/jsenumerator/benchmark/fill0.html

// http://d.hatena.ne.jp/javascripter/20080514/1210791575
Number.prototype.fillZeroBy_javascripter=function(n){
    return (new Array(n).join('0')+this).substr(-n);
};

// http://d.hatena.ne.jp/higeorange/20080515/1210817629
/*Number.prototype.fillZeroBy_higeorange = function(n) {
    var r = this.toString().split('');
    while(r.length <= n) {
        r.unshift('0');
    }
    return r.join('');
}*/
Number.prototype.fillZeroBy_higeorange = function(n) {
    return Array((n+1) - this.toString().split('').length).join('0') + this;
}

// http://os0x.g.hatena.ne.jp/os0x/20080131/1201801302
Number.prototype.fillZeroBy_os0x = function(len) {
    return ('' + Math.pow(10,len) + this).slice(-len);
}
function format0(str,len){
    return ('_' + Math.pow(10,len) + str).slice(-len);
}
// nanto_vi
Number.prototype.fillZeroBy_nanto_vi = function(len) {
    return ((1 << len).toString(2) + this).slice(-len);
}

// http://d.hatena.ne.jp/murky-satyr/20080516/1210877657
Number.prototype.fillZeroBy_murky_satyr = function(n){
    return (0 .toFixed(n) + this).slice(-n);
}
Number.prototype.fillZeroBy_murky_satyr_golf = function(l){return (''+1e20+this).slice(-l);}

例によって、JSEnumeratorのBenchmarkツールを使わせていただいています。

自作のはprototype使ってない、数値演算ベースなのが良いのか結構高速みたい(文字列でもokだし)。ただし、0の数が大きくなる(20桁?)と指数表示になっちゃてうまくいかない。そんな大量に0詰めすることは滅多にないだろうけど。

Number.prototype.fillZero - ellaneousを追加、コメント欄のnanto_viさんのも追加してみた。