MathUtil BigDecimal工具类

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

public class MathUtil{
	/**
	 * @param d1 被除数
	 * @param d2 除数
	 * @param digit 位数
	 * @return
	 */
	public static BigDecimal divide(BigDecimal d1,BigDecimal d2,int digit){
		if(d2.intValue()==0){
			return new BigDecimal(0);
		}else{
			return d1.divide(d2,digit,BigDecimal.ROUND_HALF_UP);
		}
	}
	
	/**
	 * 两数相除得到百分比
	 * @param d1 被除数
	 * @param d2 除数
	 * @param digit 位数 
	 * @return
	 */
	public static String divideToPercent(BigDecimal d1,BigDecimal d2,int digit){
		if(d2.intValue()==0){
			return "0%";
		}else{
			return convertToPercent(d1.divide(d2,3,BigDecimal.ROUND_HALF_UP).toString(),digit);
		}
	}
	
	/**
	 * 获取增长率:(d1-d2)/d2 --->转换为百分比
	 * @param d1 
	 * @param d2
	 * @param digit 百分比位数
	 * @return
	 */
	public static String getRatio(BigDecimal d1,BigDecimal d2,int digit) {
		String ratio = "0%";
		if(d2.floatValue()==0){
			ratio = d1.multiply(new BigDecimal(100)).setScale(1, BigDecimal.ROUND_HALF_UP).toString()+"%";
		}else{
			BigDecimal d3 = d1.subtract(d2).divide(d2,digit+2, RoundingMode.HALF_UP);
			ratio = convertToPercent(d3.toString(), digit);
		}
		return ratio;
	}
	
	
	/**
	 * 转化为百分比
	 * @param str
	 * @param
	 * @return
	 */
	public static String convertToPercent(String str,int digit){
		NumberFormat percent = NumberFormat.getPercentInstance();
		percent.setMaximumFractionDigits(digit);
		String ratio = percent.format(Double.parseDouble(str));
		return ratio;
	}
	
	/**
	 * 百分比转换为BigDecimal
	 * @param str
	 * @return
	 */
	public static BigDecimal convertPercentToDecimal(String str){
		String s1 = str.split("%")[0];
		BigDecimal d1 = new BigDecimal(s1).divide(new BigDecimal(100));
		return d1;
	}

	/**
	* 十进制转二进制 返回二进制字符串
	* @param: num 十进制数
	* @param: bits 保留位数
	* @author: liudongxin
	* @date: 2020/11/2 - 18:00
	*/
	public static String toBinaryString(int num,int bits){
		StringBuilder stringBuilder = new StringBuilder();
		for(int i = bits;i >= 1; i--) {
			stringBuilder.append(num >>> i & 1);
		}
		return stringBuilder.toString();
	}

	/**
	 * 异或运算
	 * @param: binaryString 二进制数
	 * @param: compareString 对照值
	 * @author: liudongxin
	 * @date: 2020/11/2 - 18:00
	 */
	public static String bitWiseXor(String binaryString, String compareString){
		//转换成字符数组
		StringBuilder stringBuilder = new StringBuilder();
		char[] chars = binaryString.toCharArray();
		char[] compareChars = compareString.toCharArray();
		for (int i = 0; i < chars.length; i++) {
			stringBuilder.append(chars[i] ^ compareChars[i]);
		}
		return stringBuilder.toString();
	}


	/**
	 * 计算幂次方 -1
	 * @param: num 十进制数
	 * @param: power 保留位数
	 * @author: liudongxin
	 * @date: 2020/11/2 - 18:00
	 */
	public static int calPower(int num,int power){
		return (int)(Math.floor(Math.pow(num,power)) - 1);
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_39472101/article/details/114012407