package com.tuoheng.common.core.utils;

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.ParseException;

/**
 * 数字处理
 * @Author ChengWang
 * @Date 2023/5/5
 */
public class CommonNumberTypeUtils {

    /***
     * @Description: 数字截取后几位,四舍五入
     * @param: d
     * @param: digit
     */
    public static double round(double d, int digit) {

        BigDecimal b = new BigDecimal(d);
        return b.setScale(digit, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /***
     *
     * @Description: 四舍五入
     * @param d
     * @param type 如： "#.00" 即表示为保留小数点后两位  几个0代表保留的位数
     * @return
     * @return double
     * @throws @throws
     */
    public static double subDecimalFormat(double d, String type) {
        if (StringUtils.isBlank(type)) {
            type = "#";
        }
        java.text.DecimalFormat df = new java.text.DecimalFormat(type);
        double d1 = Double.parseDouble(df.format(d));
        return d1;
    }

    /**
     * @Description: 将浮点数转为百分数
     * @param d
     * @param IntegerDigits 小数点前保留的位数
     * @param FractionDigits 小数点后保留的位数
     * @return String
     * @time 2018年10月1日 上午11:09:35
     */
    public static String getPercentFormat(double d,int IntegerDigits,int FractionDigits){
        NumberFormat nf = java.text.NumberFormat.getPercentInstance();
        nf.setMaximumIntegerDigits(IntegerDigits);//小数点前保留几位
        nf.setMinimumFractionDigits(FractionDigits);// 小数点后保留几位
        String str = nf.format(d);
        return str;
    }

    /**
     * @Description: 将百分数转为浮点数
     * @param d
     * @return double
     * @time 2018年10月1日 上午11:09:35
     */
    public static double getPercentToDouble(String d, int digit){
        NumberFormat nf=NumberFormat.getPercentInstance();
        Number m = null;
        try {
            m = nf.parse(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return round(Double.parseDouble(String.valueOf(m.toString())), digit) ;
    }

}
