package com.m2pool.common.core.text;

import java.math.BigDecimal;

/**
 * @Description 浮点数计算
 * @Date 2024/6/12 15:46
 * @Author dy
 */
public class DoubleCalculate {

    /**
     * 除法 v1除v2 默认保留一位小数 四舍五入
     * @param v1
     * @param v2
     * @return
     */
    public static double divide(double v1, double v2) {

        return divide(v1,v2,1);

    }

    /**
     * 除法 v1除v2 默认保留一位小数 向上取整
     * @param v1
     * @param v2
     * @return
     */
    public static double divideCEILING(double v1, double v2) {

        return divideCEILING(v1,v2,1);

    }

    /**
     * 除法 v1除v2 默认保留一位小数 向下取整
     * @param v1
     * @param v2
     * @return
     */
    public static double divideFLOOR(double v1, double v2) {

        return divideFLOOR(v1,v2,1);

    }

    /**
     * 除法 v1除v2 向上取整
     * @param v1
     * @param v2
     * @return
     */
    public static double divideCEILING(double v1, double v2,int scale) {

        BigDecimal b1 = new BigDecimal(Double.toString(v1));

        BigDecimal b2 = new BigDecimal(Double.toString(v2));

        //scale表示保留几位小数 ROUND_CEILING向上取整
        return b1.divide(b2,scale, BigDecimal.ROUND_CEILING).doubleValue();
    }

    /**
     * 除法 v1除v2 向下取整
     * @param v1
     * @param v2
     * @return
     */
    public static double divideFLOOR(double v1, double v2,int scale) {

        BigDecimal b1 = new BigDecimal(Double.toString(v1));

        BigDecimal b2 = new BigDecimal(Double.toString(v2));

        //scale表示保留几位小数 ROUND_FLOOR
        return b1.divide(b2,scale, BigDecimal.ROUND_FLOOR).doubleValue();
    }

    /**
     * 除法 v1除v2 四舍五入
     * @param v1
     * @param v2
     * @return
     */
    public static double divide(double v1, double v2,int scale) {

        BigDecimal b1 = new BigDecimal(Double.toString(v1));

        BigDecimal b2 = new BigDecimal(Double.toString(v2));

        //scale表示保留几位小数 ROUND_HALF_UP四舍五入
        return b1.divide(b2,scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * v1-v2
     * @param v1
     * @param v2
     * @return
     */
    public static double subtract(double v1, double v2) {

        BigDecimal b1 = new BigDecimal(Double.toString(v1));

        BigDecimal b2 = new BigDecimal(Double.toString(v2));

        return b1.subtract(b2).doubleValue();

    }

    /**
     * v1 + v2
     * @param v1
     * @param v2
     * @return
     */
    public static double add(double v1, double v2) {

        BigDecimal b1 = new BigDecimal(Double.toString(v1));

        BigDecimal b2 = new BigDecimal(Double.toString(v2));

        return b1.add(b2).doubleValue();

    }

    /**
     * v1*v2
     * @param v1
     * @param v2
     * @return
     */
    public static double multiply(double v1, double v2) {

        BigDecimal b1 = new BigDecimal(Double.toString(v1));

        BigDecimal b2 = new BigDecimal(Double.toString(v2));

        return b1.multiply(b2).doubleValue();

    }

}
