javascript - 将 KB 转换为 MB 和 GB
问题描述
如何设置此功能以仅以这种格式MB
或GB
以这种格式获得结果?
function formatBytes(bytes, decimals, binaryUnits) {
if (bytes == 0) {
return '0 Bytes';
}
var unitMultiple = binaryUnits ? 1024 : 1000;
var unitNames = (unitMultiple === 1024) ? // 1000 bytes in 1 Kilobyte (KB) or 1024 bytes for the binary version (KiB)
['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
:
['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
var unitChanges = Math.floor(Math.log(bytes) / Math.log(unitMultiple));
return parseFloat((bytes / Math.pow(unitMultiple, unitChanges)).toFixed(decimals || 0)) + ' ' + unitNames[unitChanges];
}
目前,当我使用此函数时,我得到 40000 / 12000 KB 的结果,我想要 40 / 12 MB 的结果。
这些是我的输入参数,这就是我想要得到结果的方式:
1000000000/1000000000 -> 1/1 Gbits
40000/12000 -> 40/12 MBits
解决方案
从某种意义上说,我进行多个除法而不是单个除法可能不太理想,但递归方法似乎相对容易实现
function formatBytes(bytes, decimals=0, binaryUnits=true) {
return format(
bytes,
binaryUnits ? 1024 : 1000,
binaryUnits ?
['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']:
['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
)
function format(value, divisor, [currentLabel, ...otherLabels]) {
if (value < divisor) return `${value.toFixed(decimals || 0)} ${currentLabel}`;
return format(value / divisor, divisor, otherLabels);
}
}
console.log(formatBytes(1000,2,true));
console.log(formatBytes(10000,2,true));
console.log(formatBytes(100000,2,true));
console.log(formatBytes(1000000,2,true));
console.log(formatBytes(10000000,2,true));
console.log(formatBytes(100000000,2,true));
console.log(formatBytes(1000000000,2,true));
推荐阅读
- javascript - 当标签在谷歌表格中未聚焦时提醒用户
- c# - 优化具有多个孩子的游戏对象的精灵变化
- google-sheets - 将公式复制到 A 列的最后一行(在表格中)
- javascript - 获取 json 文件时出现 GET - 404(未找到)错误
- angular - 直接从 html 中调用 Angular 组件的函数会破坏单元测试
- azure - 在 blob 存储中转换 xslx csv 文件并存储到 ADLS
- database - 如何开始数据输入、记录和绘图程序?(我可能会移植到一个网站)
- tensorflow - 微调后如何评估 Huggingface 模型?
- docker - 如何在 HPC 集群上运行奇异容器?- 错误:创建用户命名空间失败:用户命名空间已禁用
- reactjs - 无法读取未定义的属性(读取“updateProfile”)