计算工具类

阅读更多
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 计算工具类
 *
 */
public class MathUtil {
	
	public static final int DEFAULT_SCALE 			= 5;
	public static final int DIV_SCALE				= 10;
	public static final int DEFAULT_ROUND_MODE 		= BigDecimal.ROUND_DOWN; 			//掐尾
	public static final int ROUND_HALF_UP 			= BigDecimal.ROUND_HALF_UP; 		//四舍五入
	public static final DecimalFormat DEFAULT_DF 	= new DecimalFormat("0.00000");
	public static final DecimalFormat SHORT_DF 		= new DecimalFormat("0.00");
	
	/**
	 * 提供精确的加法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	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();
	}
	
	/**
	 * 提供精确的加法运算
	 * @param v1
	 * @param v2
	 * @return String
	 */
	public static String add(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.add(b2).toString();
	}
	
	/**
	 * 提供精确的减法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	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();
	}
	
	/**
	 * 提供精确的减法运算
	 * @param v1
	 * @param v2
	 * @return String
	 */
	public static String sub(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.subtract(b2).toString();
	}
	
	/**
	 * 提供精确的乘法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	public static double mul(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.multiply(b2).doubleValue();
	}
	
	/**
	 * 提供精确的乘法运算
	 * @param v1
	 * @param v2
	 * @return String
	 */
	public static String mul(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.multiply(b2).toString();
	}
	
	/**
	 * 提供精确的除法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	public static double div(double v1, double v2) {
		
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.divide(b2, DIV_SCALE, DEFAULT_ROUND_MODE).doubleValue();
		
	}
	
	/**
	 * 提供精确的除法运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	public static String div(String v1, String v2) {
		
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.divide(b2, DIV_SCALE, DEFAULT_ROUND_MODE).toString();
		
	}
	
	
	/**
	 * 提供精确的指数运算
	 * @param v1
	 * @param v2
	 * @return double
	 */
	public static double pow(double v1, double v2) {
		
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		return b1.pow((int)v2).doubleValue();
	}
	
	/**
	 * 提供精确的指数运算
	 * @param v1
	 * @param v2
	 * @return String
	 */
	public static String pow(String v1, int v2) {
		
		BigDecimal b1 = new BigDecimal(v1);
		return b1.pow((int)v2).toString();
	}
	
	/**
	 * 格式化,指定scale,指定roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return double
	 */
	public static double round(double v, int scale, int roundMode) {
		if(scale < 0) {
			throw new IllegalArgumentException("The scale must be a positive integer or zero.");
		}
		BigDecimal b = new BigDecimal(Double.toString(v));
		return b.setScale(scale, roundMode).doubleValue();
	}
	
	/**
	 * 格式化,指定scale,默认roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return double
	 */
	public static double round(double v, int scale) {
		return round(v, scale, DEFAULT_ROUND_MODE);
	}
	
	/**
	 * 格式化,默认scale,默认roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return double
	 */
	public static double round(double v) {
		return round(v, DEFAULT_SCALE, DEFAULT_ROUND_MODE);
	}
	
	/**
	 * 格式化,指定scale,指定roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return String
	 */
	public static String round(String v, int scale, int roundMode) {
		if(scale < 0) {
			throw new IllegalArgumentException("The scale must be a positive integer or zero.");
		}
		BigDecimal b = new BigDecimal(v);
		return b.setScale(scale, roundMode).toString();
	}
	
	/**
	 * 格式化,指定scale,默认roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return double
	 */
	public static String round(String v, int scale) {
		return round(v, scale, DEFAULT_ROUND_MODE);
	}
	
	/**
	 * 格式化,默认scale,默认roundMode
	 * @param v
	 * @param scale
	 * @param roundMode
	 * @return String
	 */
	public static String round(String v) {
		return round(v, DEFAULT_SCALE, DEFAULT_ROUND_MODE);
	}
	
	/**
	 * 格式化显示
	 * @param v
	 * @return
	 */
	public static String format(double v) {
		return DEFAULT_DF.format(round(v));
	}
	
	/**
	 * 格式化显示
	 * @param v
	 * @param decimalFormat
	 * @return
	 */
	public static String format(double v,DecimalFormat decimalFormat) {
		return decimalFormat.format(round(v));
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean gt(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) == 1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean ge(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) > -1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean eq(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) == 0 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean lt(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) == -1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean le(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		
		return b1.compareTo(b2) < 1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean gt(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) == 1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean ge(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) > -1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean eq(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) == 0 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean lt(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) == -1 ? true : false;
	}
	
	/**
	 * 比较两个数的大小
	 * @param v1
	 * @param v2
	 * @return boolean
	 */
	public static boolean le(String v1, String v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		
		return b1.compareTo(b2) < 1 ? true : false;
	}
	
}

 

你可能感兴趣的:(计算工具类,math)