java中浮点型数字运算

来源:互联网 发布:淘宝定制产品如何发布 编辑:程序博客网 时间:2024/05/21 22:43

Java中的浮点型(float和double)因为在计算机中存储方式的不同,直接运算会丢失精度;

所以一般会借助运算类java.math.BigDecimal来包装计算。

public class Arith {
private static final int DEF_DIV_SCALE = 10;

/**
* * 两个Double数相加 *
* @param v1
* @param v2
* @return Double
*/
public static Double add(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.add(b2).doubleValue());
}

/**
* * 两个Double数相减 *
* @param v1
* @param v2
* @return Double
*/
public static Double sub(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.subtract(b2).doubleValue());
}

/**
* * 两个Double数相乘 *
* @param v1
* @param v2
* @return Double
*/
public static Double mul(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.multiply(b2).doubleValue());
}

/**
* * 两个Double数相除 *
* @param v1
* @param v2
* @return Double
*/
public static Double div(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP)
.doubleValue());
}

/**
* * 两个Double数相除,并保留scale位小数 *
* @param v1
* @param v2
* @param scale
* @return Double
*/
public static Double div(Double v1, Double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP)
.doubleValue());
}

public static void main(String[] args) {
double d1 = add(2.5,4.5);
System.out.println("d1 = " + d1);

double d2 = sub(4.5,2.5);
System.out.println("d2 = " + d2);

double d3 = mul(4.5,2.5);
System.out.println("d3 = " + d3);

double d4 = div(4.5,2.5);
System.out.println("d4 = " + d4);

double d5 = div(4.5, 2.5, 0); 
System.out.println("d5 = " + d5);
}

}

0 0