java中浮點型數字運算

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);
}

}

發佈了13 篇原創文章 · 獲贊 5 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章