package com.casic.missiles.utils; import java.math.BigDecimal; import java.math.RoundingMode; /** * @Description: 单位转换工具 * @Author: wangpeng * @Date: 2024/1/12 10:54 */ public class UnitConvertUtil { /** * 频率单位换算:Hz、kHz、MHz、GHz、THz * @param valueOne 需要换算的数值 * @param valueUnit 需要换算的数值单位 * @param finalUnit 需要换算后的单位 * @return 换算后的数据 */ public static BigDecimal frequencyConvert(String valueOne, String valueUnit, String finalUnit) { BigDecimal value = new BigDecimal(valueOne); if (valueUnit.equals(finalUnit)) { return value; } BigDecimal processValue = BigDecimal.ZERO; BigDecimal resultValue = BigDecimal.ZERO; //1、将valueOne转为Hz对应值 switch (valueUnit) { case "kHz": processValue = value.multiply(new BigDecimal("1000")); break; case "MHz": processValue = value.multiply(new BigDecimal("1000000")); break; case "GHz": processValue = value.multiply(new BigDecimal("1000000000")); break; case "THz": processValue = value.multiply(new BigDecimal("1000000000000")); break; default: processValue = value; break; } //2、将valueOne转为finalUnit对应值 switch (finalUnit) { case "kHz": resultValue = processValue.divide(new BigDecimal("1000"), 4, RoundingMode.DOWN); break; case "MHz": resultValue = processValue.divide(new BigDecimal("1000000"), 4, RoundingMode.DOWN); break; case "GHz": resultValue = processValue.divide(new BigDecimal("1000000000"), 4, RoundingMode.DOWN); break; case "THz": resultValue = processValue.divide(new BigDecimal("1000000000000"), 4, RoundingMode.DOWN); default: resultValue = processValue; break; } return resultValue; } /** * 根据数值和单位得到响应保留小数位数后的数值,:kHz保留小数后3位、MHz 保留小数后6位、GHz保留小数后9位、THz保留小数后12位 * @param valueUnit 单位 * @param value 待保留小数位数的员数值 * @return 保留指定小数位数的数值 */ public static BigDecimal valueDecimalConvert(String valueUnit, String value) { BigDecimal resultValue = new BigDecimal(value); switch (valueUnit) { case "kHz": resultValue = resultValue.setScale(3, RoundingMode.DOWN); break; case "MHz": resultValue = resultValue.setScale(6, RoundingMode.DOWN); break; case "GHz": resultValue = resultValue.setScale(9, RoundingMode.DOWN); break; case "THz": resultValue = resultValue.setScale(12, RoundingMode.DOWN); break; default: break; } return resultValue; } }