当前位置 博文首页 > wwwwwwweq的博客:java 字符串 数字加法,减法,乘法,除法

    wwwwwwweq的博客:java 字符串 数字加法,减法,乘法,除法

    作者:[db:作者] 时间:2021-09-18 18:50

    ?roundingMode? ? BigDecimal类中的常量? ?小数点省略规则? 具体看源码注释

    列如:

    1、ROUND_UP:进位制:不管保留数字后面是大是小(0除外)都会进1

    2、ROUND_DOWN:保留设置数字,后面所有直接去除

    3、ROUND_HALF_UP:根据保留数字后一位?保留小数位的后一位?大于等于?5四舍五入

    4、ROUND_HALF_DOWN:根据保留数字后一位保留小数位的后一位?大于5四舍五入

    /**
     * 提供精确乘法运算的multiply方法
     *
     * @param value1 被乘数
     * @param value2 乘数
     * @param scale  精确范围(小数点后几位)
     * @param roundingMode   BigDecimal.ROUND_UP
     */
    public static String multiply(String value1, String value2, int scale, int roundingMode) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        BigDecimal result = b1.multiply(b2);
        // mode为0,则不需要精确
        result = result.setScale(scale, roundingMode);
        return result.toPlainString();
    }
    
    /**
     * 提供精确加法计算的add方法
     *
     * @param value1 被加数
     * @param value2 加数
     * @param scale  精确范围(小数点后几位)
     * @param roundingMode   BigDecimal.ROUND_UP
     */
    public static String add(String value1, String value2, int scale, int roundingMode) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        BigDecimal result = b1.add(b2);
        // mode为0,则不需要精确
        result = result.setScale(scale, roundingMode);
        return result.toPlainString();
    }
    
    /**
     * 提供精确减法运算的subtract方法
     *
     * @param value1 被减数
     * @param value2 减数
     * @param scale  精确范围(小数点后几位)
     */
    public static String subtract(String value1, String value2, int scale, int roundingMode) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        BigDecimal result = b1.subtract(b2);
        result = result.setScale(scale, roundingMode);
        return result.toString();
    }
    
    /**
     * 比较大小 :返回较大的那个
     */
    public static String getMax(String value1, String value2) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        if (b1.compareTo(b2) > 0) {
            return b1.toString();
        } else {
            return b2.toString();
        }
    }
    
    /**
     * 比较大小 :返回较小的那个
     */
    public static String getMin(String value1, String value2) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return new Double(b1.min(b2).doubleValue()).toString();
    }
    
    /**
     * 字符串除法运算
     * @param value1 被除数
     * @param value2 除数
     * @param scale 小数位
     * @param roundingMode  BigDecimal.ROUND_UP
     * @return
     */
    public static String divide(String value1, String value2, int scale, int roundingMode){
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        BigDecimal divide = b1.divide(b2);
        BigDecimal bigDecimal = divide.setScale(scale, roundingMode);
        return bigDecimal.toString();
    }
    cs