核心思路
public static String getFileSize(BigDecimal size) {
if (size.compareTo(BigDecimal.valueOf(1024)) < 0) {
return size.toPlainString() + "B";
} else if (size.compareTo(BigDecimal.valueOf(1024 * 1024)) < 0) {
return size.divide(BigDecimal.valueOf(1024), 2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
} else if (size.compareTo(BigDecimal.valueOf(1024 * 1024 * 1024)) < 0) {
return size.divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024), 2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
} else if (size.compareTo(BigDecimal.valueOf(1024 * 1024 * 1024 * 1024)) < 0) {
return size.divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024), 2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
} else {
return size.divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024)).divide(BigDecimal.valueOf(1024), 2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
}
}
转换为递归
public static String getFileSize(BigDecimal size, int count) {
String arr[] = {"B", "KB", "MB", "GB", "TB"};
if (size.compareTo(BigDecimal.valueOf(1024)) < 0 || count == 4) {
return size.toPlainString() + arr[count];
} else {
return getFileSize(size.divide(BigDecimal.valueOf(1024), 2, BigDecimal.ROUND_HALF_UP), count + 1);
}
}