工具类,用于将 字节数 转换成为合理的 字符串单位显示
调用的方式
String size = MySizeTool.formatFileSize(343434,true); //保留2位小数
String size = MySizeTool.formatFileSize(343434,false); //保留整数
public class MySizeTool {
/**
* 通过字节数得到当前的格式化字符串数据
*
* @param size
* 字节数大小
* @param flag
* 是否保留2位小数. true表示保留,false表示不保留
* @return 格式化好的字符串数据,例如: 36MB 或者 36.30MB
*/
public static String formatFileSize(long size, boolean flag) {
// 定义需要返回的字符串
String result = null;
// 定义字符串
String grade = null;
// 定义整数部分和小数部分
long zhengShu = 0;
double xiaoShu = 0;
// 将size赋值
long mSize = size;
// 查看使用什么级别的数据
int count = -1;
while (mSize > 0) {
// 计算需要多少个1024
mSize /= 1024;
count++;
}
// 如果需要0-B 1-KB 2-MB 3-GB 4-TB 5-PB
switch (count) {
case 0:
result = size + "B";
break;
case 1:
zhengShu = size >> 10;
xiaoShu = 1.0 * size / 1024 - zhengShu;
grade = "KB";
break;
case 2:
zhengShu = size >> 20;
xiaoShu = 1.0 * size / 1024 / 1024 - zhengShu;
grade = "MB";
break;
case 3:
zhengShu = size >> 30;
xiaoShu = 1.0 * size / 1024 / 1024 / 1024 - zhengShu;
grade = "GB";
break;
case 4:
zhengShu = size >> 40;
xiaoShu = 1.0 * size / 1024 / 1024 / 1024 / 1024 - zhengShu;
grade = "TB";
break;
case 5:
zhengShu = size >> 50;
xiaoShu = 1.0 * size / 1024 / 1024 / 1024 / 1024 / 1024 - zhengShu;
grade = "PB";
break;
}
// 判断
if (count != 0) {
// 得到结果
result = calculate(flag, zhengShu, xiaoShu, grade);
}
// 返回数据
return result;
}
// 用于计算的操作
private static String calculate(boolean flag, long zhengShu, double xiaoShu, String grade) {
String result;
String xs;
xs = xiaoShu + "";
// 去掉前面两个字符 0
// 是否可以保留数据
if (flag == true) {
if (xs.length() < 4) {
xs = ".00";
} else {
xs = xs.substring(1, 4);
}
result = zhengShu + xs + grade;
} else {
result = zhengShu + grade;
}
return result;
}
}