package com.link.lfs.base.util; import java.math.BigDecimal; public class ByteConverterUtil { private static String [] unitStr = new String[]{"B","KB","MB","GB","TB","PB","EB","ZB","YB","BB","NB","DB","CB","XB"}; /** * 精确计算文件大小 * @param size 字节数 * @param decimalPlaces 保留小数点后N位 * @param unit 字节转换指定单位(无法转换低于1的单位,如0.9M将会以KB响应) * @return */ public static String getPrintSize(long size,int decimalPlaces,String unit) { String result = size + "B"; BigDecimal bd = new BigDecimal(String.valueOf(size)); BigDecimal bd1024 = new BigDecimal("1024"); for (int i = 0; i < unitStr.length; i++) { if(unitStr[i].equals(unit)){ if(decimalPlaces < 1){ result = bd.toString() + unitStr[i]; }else { result = bd.setScale(decimalPlaces,BigDecimal.ROUND_HALF_DOWN).toString() + unitStr[i]; } break; } if(bd.compareTo(bd1024) == -1){ if(decimalPlaces < 1){ result = bd.toString() + unitStr[i]; }else { result = bd.setScale(decimalPlaces,BigDecimal.ROUND_HALF_DOWN).toString() + unitStr[i]; } break; }else{ bd = bd.divide(bd1024); } } return result; } public static void main(String[] args) { System.out.println(getPrintSize(12,0,"MB")); System.out.println(getPrintSize(1562,3,"B")); System.out.println(getPrintSize(15623,2,null)); System.out.println(getPrintSize(1562003,2,null)); System.out.println(getPrintSize(15620003,2,null)); System.out.println(getPrintSize(1562300098,5,"MB")); System.out.println(getPrintSize(1562300098000000099l,5,null)); } }
//欢迎指出可优化部分,共同探讨,共同前进
版权声明:本文为qq_41267876原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。