import java.math.BigDecimal;
import java.math.RoundingMode;
public class ArithUtils {
/**
* double类型数据乘法
* */
public static Double multiDouble(Double d1, Double d2){
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
//return b1.multiply(b2).doubleValue();
return b1.multiply(b2).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();//精确到小数点两位。舍弃小数点后两位的小数
}
/**
* double类型数据除法
* */
public static double div(double d1,double d2,int len) {// 进行除法运算,int len 表示精确到小数点后几位数
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.divide(b2,len,BigDecimal.ROUND_DOWN).doubleValue();
}
/**
* double类型数据减法
* */
public static Double subDouble(Double d1, Double d2){
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
//return b1.subtract(b2).doubleValue();
return b1.subtract(b2).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();//精确到小数点两位
}
/**
* double类型数据加法
* */
public static double add(Double d1, Double d2){
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
//return b1.add(b2).doubleValue();
return b1.add(b2).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();//精确到小数点两位
}
/**
* 整数类型转化为百分数
* */
public static Double divDouble(String data){
Double d2 = Double.valueOf(data);
return d2/100.00;
}
/**
* double类型比大小 d1大于d2都为true
* */
public static int compareDouble(Double d1, Double d2){
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.compareTo(b2);
}
/**
* 积分转化为人民币
* */
public static Double transformPoint(Double point, Double count){
Double unit = 1.00;
Double ruls = unit/count;
Double money = multiDouble(point,ruls);
return money;
}
/**
* 四舍五入
* */
public static double formatDoubleRound(double d) {
return (double)Math.round((d*100)/100);
}
/**
* 精确到保留到小数点后几位数
*/
public static double formatDoubleRoundDigt(double d,int len){
BigDecimal b = new BigDecimal(d);
return b.setScale(len, BigDecimal.ROUND_DOWN).doubleValue();
}
/**
* 向下取整
* */
public static double ceilPoint(double d) {
return (double)Math.floor(((d*100)/100));
}
public static void main(String[] args){
System.out.println(ArithUtils.compareDouble(11.0, 1.0));
}
/**
* Title: getPointScale
* Description: 将小数 分数转化为比例形式
* @param rate
* @return
*/
public static String getPointScale(BigDecimal rate){
double parseExcelNumericalValue = BigDecimalUtil.parseExcelNumericalValue(rate, 3, RoundingMode.HALF_UP);
String plainString = String.valueOf(parseExcelNumericalValue);
String[] split = plainString.split("\\.");
int a = Integer.parseInt(split[0]);//获取整数部分
int b = Integer.parseInt(split[1]);//获取小数部分
int length = split[1].length();
int FenZi =(int)(a*Math.pow(10, length)+b);
int FenMu = (int) Math.pow(10, length);
int MaxYueShu = getGongYueShu(FenZi,FenMu);
return FenZi/MaxYueShu+":"+FenMu/MaxYueShu;
}
/**
* Title: getGongYueShu
* Description: 求两个数的最大公约数
* @param a
* @param b
* @return
*/
public static int getGongYueShu(int a, int b) {
int t = 0;
if(a < b){
t = a;
a = b;
b = t;
}
int c = a % b;
if(c == 0){
return b;
}else{
return getGongYueShu(b, c);
}
}
}