之前遇到了字节转化对应KB/MB的问题,这里记录一下,以便学习交流,不足之处,敬请指出.废话不多说,上代码.
private String getFormatSize(long size) {
//这里限定了输入 1T以内 不包括1T
if (size <= 0 || size >= 1024 * 1024 * 1024) {
throw new RuntimeException("输入异常");
}
//这里可能出现转换异常
double dSize = 0;
try {
dSize = size;
} catch (Exception e) {
e.printStackTrace();
}
//除数因子
double divideBasic = 1024;
if (size < 1024) { //1kb以内
if (size < 1000) {
return String.valueOf(size + "B");
} else { //大于1000B,转化为kb,基于用户习惯
return String.format("%.2f", dSize / divideBasic) + "K";
}
} else if (size < 1024 * 1024) { //1M以内
if (size < 1024 * 1000) {
return String.format("%.2f", dSize / divideBasic) + "K";
} else {//大于1000Kb,转化为M
return String.format("%.2f", dSize / divideBasic / divideBasic) + "M";
}
} else { //1TB以内
if (size < 1024 * 1024 * 1000) {
return String.format("%.2f", dSize / divideBasic / divideBasic) + "M";
} else {//大于1000Mb,转化为T
return String.format("%.2f", dSize / divideBasic / divideBasic / divideBasic) + "T";
}
}
}
有几个问题需说明:
1,数值大于1T的没做处理,基本满足日常开发对转换的需求
2,"%.2f" 其中.2表示保留小数点后两位,如果是.3则保留3位,以此类推