私はこのコードPHP 経由でサイズをバイト単位で変換します。
ここで、JavaScript を使用してこれらのサイズを人間が判読できるサイズに変換したいと思います。このコードを JavaScript に変換してみると、次のようになります。
function formatSizeUnits(bytes){
if (bytes >= 1073741824) { bytes = (bytes / 1073741824).toFixed(2) + " GB"; }
else if (bytes >= 1048576) { bytes = (bytes / 1048576).toFixed(2) + " MB"; }
else if (bytes >= 1024) { bytes = (bytes / 1024).toFixed(2) + " KB"; }
else if (bytes > 1) { bytes = bytes + " bytes"; }
else if (bytes == 1) { bytes = bytes + " byte"; }
else { bytes = "0 bytes"; }
return bytes;
}
これは正しいやり方でしょうか?もっと簡単な方法はありますか?
ベストアンサー1
これから: (ソース)
縮小されず ES6 化されています: (コミュニティによる)
function formatBytes(bytes, decimals = 2) {
if (!+bytes) return '0 Bytes'
const k = 1024
const dm = decimals < 0 ? 0 : decimals
const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
const i = Math.floor(Math.log(bytes) / Math.log(k))
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`
}
// Demo code
document.body.innerHTML += `<input type="text" oninput="document.querySelector('p').innerHTML=formatBytes(this.value)" value="1000"><p>1000 Bytes</p>`
縮小版 (StackOverflowのコミュニティによる、縮小版はJS圧縮)
function formatBytes(a,b=2){if(!+a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return`${parseFloat((a/Math.pow(1024,d)).toFixed(c))} ${["Bytes","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"][d]}`}
使用法:
// formatBytes(bytes, decimals)
formatBytes(1024) // 1 KiB
formatBytes('1024') // 1 KiB
formatBytes(1234) // 1.21 KiB
formatBytes(1234, 3) // 1.205 KiB
formatBytes(0) // 0 Bytes
formatBytes('0') // 0 Bytes
PS:必要に応じてk = 1000
変更してください (ビットまたはバイト)sizes = ["..."]