double数据类型与float数据类型 计算 精度问题:
public class ArithUtil {
private static final int DEF_DIV_SCALE = 10;
//String类型数据的+-*/
//加
public static double add(String d1, String d2) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.add(b2).doubleValue();
}
//减
public static double sub(String d1, String d2) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.subtract(b2).doubleValue();
}
//乘
public static double mul(String d1, String d2) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.multiply(b2).doubleValue();
}
//除
public static double div(String d1, String d2) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
}
//比较二个double类型数据的大小
public static int compare(double a,double b){
BigDecimal data1 = new BigDecimal(a);
BigDecimal data2 = new BigDecimal(b);
return data1.compareTo(data2) ;
}
//比较二个float类型数据的大小
public static int compare(float a,float b){
BigDecimal data1 = new BigDecimal(a);
BigDecimal data2 = new BigDecimal(b);
return data1.compareTo(data2) ;
}
//取消科学计数法
public static String cancelE(float num){
return new DecimalFormat("0.00").format(num);
}
}
注意:
关于保留小数点位数,牵涉四舍五入问题,建议先计算出结果再四舍五入,否则问出现数据问题。