質問: Math.floor(Math.log(fileSize) / Math.log(1024)) return `${Math.round(fileSize / (1024 ** i))}${['Bytes', 'KB', 'MB', 'GB', 'TB'][i]}` } ``` 自然対数^1 にしている意味と、それを割ることで index が出せる理由がわかりません。
回答: ある数値xがあって`log(x)/log(1024)`することの意味はxが1024の何乗かを求めていることになります。 累乗数と対数の関係が y = ax の時 x = loga y で この場合累乗数xは x = log1024 y で、 底の変換をすると、(底はe(つまり自然対数)でも10(常用対数)でもなんでも構いません) log1024 y = loge y / loge 1024 となります。 つまりファイルサイズが1024の何乗かを求めていることになります。 それで、端数を切り捨てると ちょうど1024の0乗・1乗・2乗・・の整数の累乗数となって 配列`['Bytes', 'KB', 'MB', 'GB', 'TB']`のインデックスとして使えます。