double值的精確計算 bigdecimal

2021-08-30 13:10:36 字數 1527 閱讀 2707

//表示需要精確到小數點以後幾位

public static final int scale = 2;

/*** 提供精確的加法運算。

* @param v1 被加數

* @param v2 加數

* @return 兩個引數的和

*/public static double adddouble(double d1,double d2)

/*** 提供精確的減法運算。

* @param v1 被減數

* @param v2 減數

* @return 兩個引數的差

*/public static double subdouble(double d1,double d2)

/*** 提供精確的乘法運算。

* @param v1 被乘數

* @param v2 乘數

* @return 兩個引數的積

*/public static double muldouble(double d1,double d2)

/*** 提供(相對)精確的除法運算,當發生除不盡的情況時,精確到

* 小數點以後10位,以後的數字四捨五入。

* @param v1 被除數

* @param v2 除數

* @return 兩個引數的商

*/public static double divdouble(double d1,double d2)

/*** 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale引數指

* 定精度,以後的數字四捨五入。

* @param v1 被除數

* @param v2 除數

* @param scale 表示表示需要精確到小數點以後幾位。

* @return 兩個引數的商

*/public static double div(double v1,double v2,int scale)

bigdecimal b1 = new bigdecimal(double.tostring(v1));

bigdecimal b2 = new bigdecimal(double.tostring(v2));

return b1.divide(b2,scale,bigdecimal.round_half_up).doublevalue();

}/**

* 提供精確的小數字四捨五入處理。

* @param v 需要四捨五入的數字

* @param scale 小數點後保留幾位

* @return 四捨五入後的結果

*/public static double round(double v,int scale)

bigdecimal b = new bigdecimal(double.tostring(v));

bigdecimal one = new bigdecimal("1");

return b.divide(one,scale,bigdecimal.round_half_up).doublevalue();

}

計算分數精確值

第一周程式設計作業 題目內容 由於計算機內部表達方式的限制,浮點運算都有精度問題,為了得到高精度的計算結果,就需要自己設計實現方法。0,1 之間的任何浮點數都可以表達為兩個正整數的商,為了表達這樣兩個數的商,可以將相除的結果存放在一維陣列中,陣列的每個元素存放一位十進位制數字。即商的第一位存放在第乙...

階乘的精確值

例如輸入不超過1000的正整數n,輸出n 1x2x3.xn的精確結果。例如輸入30輸出 265252859812191058636308480000000 當輸入1000時1000的階乘約4 10 2567 大概3000位數字,如果採用普通的階乘演算法很明顯溢位 int fun int n 求n的階...

階乘的精確值

輸入乙個不超過1000的正整數n,輸出n 簡單輸入 30簡單輸出 265252859812191058636308480000000 include include define maxn 3000 int f maxn 演算法分析 由於資料不超過1000,則最大為1000,而1000的階乘那是很大...