zoukankan      html  css  js  c++  java
  • 提供精确的加减乘除运算

    package com.JUtils.math;
    
    import java.math.BigDecimal;
    
    import com.JUtils.base.ValidateHelper;
    
    /**
     * 提供精确的加减乘除运算
     *
     */
    public class BigDecimalUtils {
        
        /**
         * 默认保留位:2
         */
        private static int     DEFAULT_SCALE = 2;
        
        /**
         * 默认四舍五入规则为:向上舍入
         */
        private static int DEFAULT_ROUND = BigDecimal.ROUND_HALF_UP;
        
        /**
         * 
         * 加法运算
         *
         * @param v1    加数
         * @param v2    被加数
         * @return
         */
        public static String add(String v1,String v2){    
            BigDecimal b1 = new BigDecimal(v1);    
            BigDecimal b2 = new BigDecimal(v2);    
            return b1.add(b2).toString();
        }    
        
        /**
         * 除法运算<br>
         * 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。
         *
         * @param v1
         *             除数
         * @param v2
         *             被除数
         * @param scale
         *             精确精度
         * @return
         */
        public static String div(String v1, String v2, int scale, int round) {
            if (scale < 0) {
                throw new IllegalArgumentException(
                        "The scale must be a positive integer or zero");
            }
    
            if (ValidateHelper.isEmpty(scale)) {
                scale = DEFAULT_SCALE;
            }
    
            if (ValidateHelper.isEmpty(round)) {
                round = DEFAULT_ROUND;
            }
    
            BigDecimal b1 = new BigDecimal(v1);
            BigDecimal b2 = new BigDecimal(v2);
            return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();
        }
        
        /**
         * 比较两个数<br>
         * v1 > v2 return 1<br>
         * v1 = v2 return 0<br>
         * v1 < v2 return -1
         *
         * @param v1
         *             比较数
         * @param v2
         *             被比较数
         * @return
         */
        public static int compareTo(String v1,String v2){    
            BigDecimal b1 = new BigDecimal(v1);    
            BigDecimal b2 = new BigDecimal(v2);    
            return b1.compareTo(b2);    
        }   
        
        /**
         * 返回较小数
         * @param v1
         * @param v2
         * @return
         */
        public static String returnMin(String v1,String v2){    
            BigDecimal b1 = new BigDecimal(v1);    
            BigDecimal b2 = new BigDecimal(v2);    
            return b1.min(b2).toString();    
        }   
        
        /**
         * 返回较大数
         *
         * @param v1
         * @param v2
         * @return
         */
        public static String returnMax(String v1,String v2){    
            BigDecimal b1 = new BigDecimal(v1);    
            BigDecimal b2 = new BigDecimal(v2);    
            return b1.max(b2).toString();    
        }   
        
        /**
         * 处理BigDecimal数据,保留scale位小数
         * @param value
         * @param scale
         * @return
         */
        public static BigDecimal getValue(BigDecimal value,int scale){
            if(!ValidateHelper.isEmpty(value)){
                return value.setScale(scale, BigDecimal.ROUND_HALF_UP);
            }
            return value;
        }
        
        /**
         * 将object转换为Bigdecimal
         *
         *
         * @param value
         *                 待转换的数值
         * @return
         */
        public static BigDecimal getBigDecimal(Object value){
            BigDecimal resultValue = new BigDecimal(0);
            if(value instanceof String){
                resultValue =  new BigDecimal((String)value);
            }
            else if(value instanceof Integer){
                resultValue =  new BigDecimal((Integer)value);
            }
            else if(value instanceof Long){
                resultValue =  new BigDecimal((Long)value);
            }
            else if(value instanceof Double){
                resultValue =  new BigDecimal((Double)value);
            }
            else{
                resultValue = (BigDecimal) value;
            }
            
            return resultValue;
        }
        
        
        /**
         * 将object转换为Bigdecimal,若object为空,则返回resultValue
         *
         *
         * @param value
         * @return
         */
        public static BigDecimal getBigDecimal(Object value,BigDecimal resultValue){
            if(ValidateHelper.isEmpty(value)){
                return resultValue;
            }
            
            resultValue = getBigDecimal(resultValue);
            
            return resultValue;
        }
        
        /**
         * 将BigDecimal 转换成Long
         *
         * @param value
         * @return
         */
        public static Long bigDecimalToLong(BigDecimal value){
            if(value != null){
                return new Long(value.longValue());
            }
            return null;
        }
        
        /**
         * 将BigDecimal 转换成integer
         *
         * @param value
         * @return
         */
        public static Integer bigDecimalToInteger(BigDecimal value){
            if(value != null){
                return new Integer(value.intValue());
            }
            return null;
        }
    }
  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/JonaLin/p/11276189.html
Copyright © 2011-2022 走看看