不能直接運算?是因為計算機儲存浮點類型的數值使用指數和尾數來表示?這就意味著計算時會出現“精度缺失”的現象?
為了解決這個問題?我們引入 java.math.BigDecimal類來進行精確計算。
具體如下:
public class Arith {
?
? ? ?//加法運算
?? ?public? static double add(double v1,double v2){ ?
?? ???????? BigDecimal b1 = new BigDecimal(Double.toString(v1)); ?
?? ???????? BigDecimal b2 = new BigDecimal(Double.toString(v2)); ?
?? ???????? return b1.add(b2).doubleValue(); ?
?? ???? } ?
?? ?// 減法運算
?? ?public static double sub(double v1,double v2){
?? ???????? BigDecimal b1 = new BigDecimal(Double.toString(v1)); ?
?? ???????? BigDecimal b2 = new BigDecimal(Double.toString(v2)); ?
?? ???????? return b1.subtract(b2).doubleValue(); ?
?? ???? }
?// 乘法運算
?? ?public static double mul(double d1, double d2){? ? ? ??
?? ????????? BigDecimal b1 = new BigDecimal(d1);
?? ????????? BigDecimal b2 = new BigDecimal(d2);
?? ???????? return b1.multiply(b2).doubleValue();
?? ????? }
?? ?// 除法運算
?? ?public static? double div(double d1,double d2,int len) {
?? ????????? BigDecimal b1 = new BigDecimal(d1);
?? ????????? BigDecimal b2 = new BigDecimal(d2);
?? ???????? return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
?? ????? }
?? ?// 四舍五入
?? ???? public? double round(double d,int len) {?
?? ????????? BigDecimal b1 = new BigDecimal(d);
?? ????????? BigDecimal b2 = new BigDecimal(1);
?? ???????? // 任何一個數字除以1都是原數字
?? ????????
// ROUND_HALF_UP是BigDecimal的一個常量,表示進行四舍五入的操作
?? ???????? return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP).doubleValue();
?? ????? }
}
?