2017-11-15 21 views
1

이 함수를 만들었으므로 바이트 양을 올바른 이진 단위로 조정합니다. 내가 겪고있는 문제는 파일이 1000과 1024 바이트 사이에있을 때마다 다음과 같이 나타납니다 : 1.02e+3 KB. 내가 틀린 일을하고 있습니까? 아니면 모든 예외를 포기하는 것을 잊었습니까? 도와 주셔서 감사합니다.자바 스크립트 파일 크기가 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 대신 1024를 사용해야한다고 생각합니다.이 내용을 읽으십시오 ... 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) + 단위 + ''; 왜냐하면 이것은 나를 위해 아무 것도 바뀌지 않기 때문이다. –