3 回答
TA貢獻1869條經驗 獲得超4個贊
const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
function niceBytes(x){
let l = 0, n = parseInt(x, 10) || 0;
while(n >= 1024 && ++l){
n = n/1024;
}
//include a decimal point and a tenths-place digit if presenting
//less than ten of KB or greater units
return(n.toFixed(n < 10 && l > 0 ? 1 : 0) + ' ' + units[l]);
}
結果:
niceBytes(1) // 1 byte
niceBytes(435) // 435 bytes
niceBytes(3398) // 3.3 KB
niceBytes(490398) // 479 KB
niceBytes(6544528) // 6.2 MB
niceBytes(23483023) // 22 MB
niceBytes(3984578493) // 3.7 GB
niceBytes(30498505889) // 28 GB
niceBytes(9485039485039445) // 8.4 PB
TA貢獻1906條經驗 獲得超3個贊
toFixed(n)toPrecision(n)對于所有值都具有一致的精度可能更合適。為了避免尾隨零(例如:),bytesToSize(1000) // return "1.00 KB"我們可以使用parseFloat(x)。我建議將最后一行替換為:return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];。與之前的更改相比,結果是: bytesToSize(1000) // return "1 KB"/ bytesToSize(1100) // return "1.1 KB"/ bytesToSize(1110) // return "1.11 KB/ bytesToSize(1111) // also return "1.11 KB"
添加回答
舉報
