2017-11-15 11 views
1

この関数を作成したので、バイト数を正しいバイナリ単位に適合させます。私が抱えている問題は、ファイルが1000バイトから1024バイトの間にあるときは、それが1.02e+3 KBのように現れるということです。私は何か間違っているのですか、それともすべての例外をキャッチするのを忘れましたか?助けてくれてありがとう。javascript filesize機能グリッチ(1000から1024までのバイト数)

var ce_sizeSuffixes = [" B", " KB", " MB", " GB", " TB"]; 

function grid_filesizeCellClientTemplate(bytes) { 
    if (!bytes) 
     return ""; 

    var e = Math.floor(Math.log(bytes)/Math.log(1024)); 
    var size = (bytes/Math.pow(1024, Math.floor(e))); 
    var unit = ce_sizeSuffixes[e]; 
    //bug with a size >= 1000 and < 1024 
    return '<span title="' + bytes + ' bytes">' + (e === 0 ? size : size.toPrecision(3)) + unit + '</span>'; 
} 

対処:

var ce_sizeSuffixes = [" B", " KB", " MB", " GB", " TB"]; 
function grid_filesizeCellClientTemplate(bytes) { 
if (!bytes) 
    return ""; 

var e = Math.floor(Math.log(bytes)/Math.log(1024)); 
var size = (bytes/Math.round(size * 1000)/1000)); 
var unit = ce_sizeSuffixes[e]; 
//bug with a size >= 1000 and < 1024 
return '<span title="' + bytes + ' bytes">' + (e === 0 ? size : size.toPrecision(3)) + unit + '</span>'; 
+3

問題を再現できません。あなたはどこを走っていますか? – evolutionxbox

+0

上記と同じですが、私はあなたが1024の代わりに1000を使うべきだと思います。これを読んでください... https://en.wikipedia.org/wiki/Binary_prefix – Archer

+0

これは、 'toPrecision'がしていることです... –

答えて

1

toPrecisionは、有効数字の所定の数にフォーマットされた数値を出力します。 1010、または10001024の間の任意の数値は4桁の有効数字を持ちますが、コードに3を与えるように指示します。したがって、1.01e+3

数字を小数点以下3桁に丸めたい場合は、Math.round(size*1000)/1000としてください。

+0

できました"バグ"を複製するには?もしそうなら、どうですか? – evolutionxbox

+0

@evolutionxboxブラウザコンソールを開き、 '1010..toPrecision(3)'とタイプし、 '' 1.01e + 3 ''を得る。 –

+0

@NiettheDarkAbsolそれで、私のreturnステートメントは次のようなものになるはずです:return '' +(e === 0?size:Math.round(size * 1000)/ 1000 )+ unit + '';これは私のために何も変わらないからです。 –

関連する問題