先运行一段代码看看结果再说:
代码:
public static void main(String args[]){
System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);
}
结果:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
对,你没看错,运行结果确实是这样的。
解决办法:
在这里我们用了BigDecimal 这个类,使用代码如下:
public class ArithUtil {
private static final int DEF_DIV_SCALE = 10;
/**
* 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();
}
//减
public static double sub(double d1, double d2) {
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.subtract(b2).doubleValue();
}
//乘
public static double mul(double d1, double d2) {
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.multiply(b2).doubleValue();
}
//除
public static double div(double d1, double d2) {
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* float 值的加减乘除
*/
public static float add(float d1, float d2) {
BigDecimal b1 = new BigDecimal(Float.toString(d1));
BigDecimal b2 = new BigDecimal(Float.toString(d2));
return b1.add(b2).floatValue();
}
public static float sub(float d1, float d2) {
BigDecimal b1 = new BigDecimal(Float.toString(d1));
BigDecimal b2 = new BigDecimal(Float.toString(d2));
return b1.subtract(b2).floatValue();
}
public static float mul(float d1, float d2) {
BigDecimal b1 = new BigDecimal(Float.toString(d1));
BigDecimal b2 = new BigDecimal(Float.toString(d2));
return b1.multiply(b2).floatValue();
}
public static float div(float d1, float d2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Float.toString(d1));
BigDecimal b2 = new BigDecimal(Float.toString(d2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).floatValue();
}
//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) ;
}
}
总结
好了就说到这里吧,没什么好说的照着做就行。