编辑代码

package com.lyd.wx.uitls;

import java.math.BigDecimal;
import java.util.Scanner;

/**
 * @description: TODO
 * @author haiyang
 * @date 2023/5/11 22:15
 * @version 1.0
 *
 * 满减系数 30(n-1)
 *
 * 1 0-299       0
 * 2 300-599     30
 * 3 600-899     60
 * 4 900-1199    90
 */
public class Price {

    private static final int DEF_DIV_SCALE = 2;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        double superValue = 300;
        int fijo = 30;
        double progress = 299;
        System.out.println("请输入成本价格:");
        double cost = sc.nextInt();

        System.out.println("请输入你想售卖的价格:");
        double sellingPrice = sc.nextInt();

        //优惠券
        double coupon = 0.0;
        //区间最大值 = 成本价 + 299
        double intervalMax = sellingPrice + superValue;
        //系数区间 向下取整
        double na = Math.floor(intervalMax / superValue);
        int ya = new Double(na).intValue();

        //系数区间 向上取整
        double nb = Math.ceil(intervalMax / superValue);
        int yb = new Double(nb).intValue();


//        // 当前满减优惠金额 30(n-1)
//        double full = fijo * (na - 1);
//        //满减区间最小值
//        double fullMin =  full * 10;
//        System.out.println("当前满减区间["+fullMin+","+add(fullMin,progress)+"]"+"当前满减优惠最大金额: "+ full);
//        System.out.println("当前产品定价: "+ sellingPrice);
//
//        //当前优惠券最大设置值
//        coupon = sub(sub(sellingPrice,full),cost);
//        System.out.println("当前优惠券最大设置值: "+ coupon);
//
//
//        System.out.println("--------------------------递增区间-----------------------------");
//        double fullIncrement = fijo * (nb - 1);
//        //满减区间最小值
//        double fullIncrementMin =  fullIncrement * 10;
//        System.out.println("递增满减区间["+fullIncrementMin+","+add(fullIncrementMin,progress)+"]"+"当前满减优惠最大金额: "+ fullIncrement);
//        System.out.println("当前产品定价: "+ sellingPrice);
//
//        //当前优惠券最大设置值
//        double couponIncrement = sub(sub(sellingPrice,fullIncrement),cost);
//        System.out.println("当前优惠券最大设置值: "+ couponIncrement);

        for (int i = 1; i < 20; i++) {
            double full = fijo * (i - 1);
            //满减区间最小值
            double priceMin =  full * 10;
            System.out.println("当前产品定价: "+ sellingPrice);

            //当前优惠券最大设置值

            if (full != 0){
                double fullMax = div(sellingPrice,priceMin,2) * full;
                System.out.println("当前满减区间["+priceMin+","+add(priceMin,progress)+"]"+"当前满减优惠最大金额: "+ fullMax);

                coupon = sub(sub(sellingPrice,fullMax),cost);
                System.out.println("当前优惠券最大设置值: "+ coupon);
                System.out.println();
            }else {
                System.out.println("当前满减区间["+priceMin+","+add(priceMin,progress)+"]"+"当前满减优惠最大金额: "+ full);
                coupon = sub(sub(sellingPrice,full),cost);
                System.out.println("当前优惠券最大设置值: "+ coupon);
                System.out.println();
            }
        }
    }

    /**
     * @Description 两个Double数相乘
     *
     * @param d1
     * @param d2
     * @return Double
     */
    public static Double mul(Double d1,Double d2){
        BigDecimal b1 = new BigDecimal(d1.toString());
        BigDecimal b2 = new BigDecimal(d2.toString());
        return b1.multiply(b2).doubleValue();
    }

    /**
     * @Description 两个Double数相除
     *
     * @param d1
     * @param d2
     * @return Double
     */
    public static Double div(Double d1,Double d2){
        BigDecimal b1 = new BigDecimal(d1.toString());
        BigDecimal b2 = new BigDecimal(d2.toString());
        return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * @Description 两个Double数相除,并保留scale位小数
     *
     * @param d1
     * @param d2
     * @param scale
     * @return Double
     */
    public static Double div(Double d1,Double d2,int scale){
        if(scale<0){
            throw new IllegalArgumentException(
                    "The scale must be a positive integer or zero");
        }
        BigDecimal b1 = new BigDecimal(d1.toString());
        BigDecimal b2 = new BigDecimal(d2.toString());
        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    public static double sub(double v1,double v2){
         BigDecimal b1 = new BigDecimal(Double.toString(v1));
         BigDecimal b2 = new BigDecimal(Double.toString(v2));
         return b1.subtract(b2).doubleValue();
    }

    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();
    }
}