核心思路
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);
}
}
本文介绍了一种将文件大小转换为人类可读格式的方法,包括非递归和递归两种实现方式。通过使用BigDecimal类进行精确的数学运算,确保了在转换过程中精度的准确性。递归方法进一步简化了代码结构,提高了可读性和维护性。
9482

被折叠的 条评论
为什么被折叠?



