KB、MB、GB 项目转换工具类,可将文件大小以KB、MB、GB为单位进行转换。方便用户在不同的场景中灵活地进行单位转换,快速准确地理解和比较文件大小。无需复杂的计算,一键转换即可。提供简洁、易用的操作界面,让用户轻松地完成单位转换操作。
public class FlowUnitConverter {
public static final BigDecimal MULTIPLIER_1024 = new BigDecimal(1024);
public static BigDecimal toKB(String unit, BigDecimal val){
FlowUnitEnums unitEnums = FlowUnitEnums.unitOf(unit);
return null != unitEnums ? unitEnums.toKB(val).setScale(2, RoundingMode.HALF_UP) : val;
}
public static BigDecimal toMB(String unit, BigDecimal val){
FlowUnitEnums unitEnums = FlowUnitEnums.unitOf(unit);
return null != unitEnums ? unitEnums.toMB(val).setScale(2, RoundingMode.HALF_UP) : val;
}
public static BigDecimal toGB(String unit, BigDecimal val){
FlowUnitEnums unitEnums = FlowUnitEnums.unitOf(unit);
return null != unitEnums ? unitEnums.toGB(val).setScale(2, RoundingMode.HALF_UP) : val;
}
public static BigDecimal toUnitFromMB(String unit, BigDecimal val){
FlowUnitEnums unitEnums = FlowUnitEnums.unitOf(unit);
return null != unitEnums ? val.divide(unitEnums.toMB(BigDecimal.ONE)).setScale(2, RoundingMode.HALF_UP) : val;
}
enum FlowUnitEnums {
GB("GB"){
@Override
public BigDecimal toKB(BigDecimal val) {
return null != val ? val.multiply(MULTIPLIER_1024).multiply(MULTIPLIER_1024) : null;
}
@Override
public BigDecimal toMB(BigDecimal val) {
return null != val ? val.multiply(MULTIPLIER_1024) : null;
}
@Override
public BigDecimal toGB(BigDecimal val) {
return val;
}
},
MB("MB") {
@Override
public BigDecimal toKB(BigDecimal val) {
return null != val ? val.multiply(MULTIPLIER_1024) : null;
}
@Override
public BigDecimal toMB(BigDecimal val) {
return val;
}
@Override
public BigDecimal toGB(BigDecimal val) {
return null != val ? val.divide(MULTIPLIER_1024) : null;
}
},
KB("KB") {
@Override
public BigDecimal toKB(BigDecimal val) {
return val;
}
@Override
public BigDecimal toMB(BigDecimal val) {
return null != val ? val.divide(MULTIPLIER_1024) : null;
}
@Override
public BigDecimal toGB(BigDecimal val) {
return null != val ? val.divide(MULTIPLIER_1024).divide(MULTIPLIER_1024) : null;
}
};
private String unit;
private static Map<String, FlowUnitEnums> flowUnitEnumMap = new HashMap<>();
static {
for (FlowUnitEnums flowUnitEnum : FlowUnitEnums.values()) {
flowUnitEnumMap.put(flowUnitEnum.unit, flowUnitEnum);
}
}
FlowUnitEnums(String unit) {
this.unit = unit;
}
public abstract BigDecimal toKB(BigDecimal val);
public abstract BigDecimal toMB(BigDecimal val);
public abstract BigDecimal toGB(BigDecimal val);
public static FlowUnitEnums unitOf(String unit){
if(null == unit || unit.length() == 0){
return null;
}
return flowUnitEnumMap.get(unit.toUpperCase());
}
}
}