package com.bocloud.ims.common.utils;

import java.math.BigDecimal;

/**
 * 数学工具类
 *
 * @author sxp
 * @since 2023/5/25
 */
public class MathUtils {
    /**
     * 判定一个字符串是不是数值
     *
     * @author Shawpin Shi
     * @since Jun 30, 2016
     */
    public static boolean isNumber(String numberString) {
        try {
            Double.parseDouble(numberString);
            return true;
        } catch (NumberFormatException ex) {
            return false;
        }
    }

    /**
     * 将字符串转化为double值返回，如果字符串不是数字返回0
     *
     * @author Shawpin Shi
     * @since 2017/12/10
     */
    public static double parseDouble(String numberString) {
        try {
            return Double.parseDouble(numberString);
        } catch (NumberFormatException ex) {
            return 0;
        }
    }

    /**
     * 判定一个字符串是不是整数
     *
     * @author Shawpin Shi
     * @since 2017/12/10
     */
    public static boolean isInteger(String numberString) {
        try {
            Integer.parseInt(numberString);
            return true;
        } catch (NumberFormatException ex) {
            return false;
        }
    }

    /**
     * 四舍五入函数
     *
     * @param sourceNum 原来的数字
     * @param scale 需要保留的精度，即小数点后的位数
     * @author Shawpin Shi
     * @since Jun 30, 2016
     * @since 2018-08-29 删除原来先保留20位小数的的两行代码
     */
    public static double round(double sourceNum, int scale) {
        BigDecimal sourceBD = new BigDecimal(Double.toString(sourceNum));
        BigDecimal one = new BigDecimal("1");

        // ROUND_HALF_UP
        // 向“最接近的”数字舍入，如果与两个相邻数字的距离相等，则舍入远离零的方向（数轴上方向上）。
        // 注意，这是我们大多数人在小学时就学过的舍入模式，即四舍五入。

        return sourceBD.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}
