package com.irrigation.icl.utils; import com.irrigation.icl.exception.ContextRuntimeException; import java.math.BigDecimal; import java.util.Optional; /** * @description: 浮点数操作工具类 * @Author: yangLang * @CreateDate: 2020/4/29 16:09 */ public final class DoubleValueUtils { /** * 默认保留位数 */ private final static int SCALE = 4; private DoubleValueUtils() { } /** * 计算两个浮点数之和 * * @param value 加数 * @param addValue 被加数 * @return 返回结果四舍五入,保留4位小数 * @Author: yangLang */ public static double doubleAdd(Double value, Double addValue) { value = Optional.ofNullable(value).orElse(0.0); addValue = Optional.ofNullable(addValue).orElse(0.0); return new BigDecimal(value.toString()).add(new BigDecimal(addValue.toString())) .setScale(SCALE, BigDecimal.ROUND_HALF_UP) .doubleValue(); } /** * 计算两个浮点数之和 * * @param value 加数 * @param addValue 被加数 * @param scale 保留位数 * @return 返回结果四舍五入,保留4位小数 * @Author: yangLang */ public static double doubleAdd(Double value, Double addValue, int scale) { value = Optional.ofNullable(value).orElse(0.0); addValue = Optional.ofNullable(addValue).orElse(0.0); return new BigDecimal(value.toString()).add(new BigDecimal(addValue.toString())) .setScale(scale, BigDecimal.ROUND_HALF_UP) .doubleValue(); } /** * 计算两个浮点数之差 * * @param value 减数 * @param subValue 被减数 * @return 返回结果四舍五入,保留4位小数 * @Author: yangLang */ public static double doubleSub(Double value, Double subValue) { value = Optional.ofNullable(value).orElse(0.0); subValue = Optional.ofNullable(subValue).orElse(0.0); return new BigDecimal(value.toString()).subtract(new BigDecimal(subValue.toString())) .setScale(SCALE, BigDecimal.ROUND_HALF_UP) .doubleValue(); } /** * 计算两个浮点数之差 * * @param value 减数 * @param subValue 被减数 * @param scale 保留位数 * @return 返回结果四舍五入,保留4位小数 * @Author: yangLang */ public static double doubleSub(Double value, Double subValue, int scale) { value = Optional.ofNullable(value).orElse(0.0); subValue = Optional.ofNullable(subValue).orElse(0.0); return new BigDecimal(value.toString()).subtract(new BigDecimal(subValue.toString())) .setScale(scale, BigDecimal.ROUND_HALF_UP) .doubleValue(); } /** * 计算两个浮点数之积 * * @param value 乘数 * @param mutValue 被乘数 * @return 返回结果四舍五入,保留4位小数 * @Author: yangLang */ public static double doubleMulti(Double value, Double mutValue) { value = Optional.ofNullable(value).orElse(0.0); mutValue = Optional.ofNullable(mutValue).orElse(0.0); return new BigDecimal(value.toString()).multiply(new BigDecimal(mutValue.toString())) .setScale(SCALE, BigDecimal.ROUND_HALF_UP) .doubleValue(); } /** * 计算两个浮点数之积 * * @param value 乘数 * @param mutValue 被乘数 * @param scale 保留位数 * @return 返回结果四舍五入,保留4位小数 * @Author: yangLang */ public static double doubleMulti(Double value, Double mutValue, int scale) { value = Optional.ofNullable(value).orElse(0.0); mutValue = Optional.ofNullable(mutValue).orElse(0.0); return new BigDecimal(value.toString()).multiply(new BigDecimal(mutValue.toString())) .setScale(scale, BigDecimal.ROUND_HALF_UP) .doubleValue(); } /** * 计算两个浮点数之商 * * @param value 除数 * @param divValue 被除数 * @return 返回结果四舍五入,保留4位小数 * @Author: yangLang */ public static double doubleDiv(Double value, Double divValue) { value = Optional.ofNullable(value).orElse(0.0); divValue = getDivValue(divValue); return new BigDecimal(value.toString()).divide(new BigDecimal(divValue.toString())) .setScale(SCALE, BigDecimal.ROUND_HALF_UP) .doubleValue(); } /** * 计算两个浮点数之商 * * @param value 除数 * @param divValue 被除数 * @param scale 保留位数 * @return 返回结果四舍五入,保留4位小数 * @Author: yangLang */ public static double doubleDiv(Double value, Double divValue, int scale) { value = Optional.ofNullable(value).orElse(0.0); divValue = getDivValue(divValue); return new BigDecimal(value.toString()).divide(new BigDecimal(divValue.toString())) .setScale(scale, BigDecimal.ROUND_HALF_UP) .doubleValue(); } private static Double getDivValue(Double divValue) { divValue = Optional.ofNullable(divValue).orElse(0.0); if (ObjectUtils.equals(divValue, 0)) { throw new ContextRuntimeException("被除数不能为0"); } return divValue; } }