浮點數計算時損失精度的問題

1 /*
2 浮點數在Java中是以二進制表示的,這樣的話就有不少數不能準確表示
3 有的表示的是一個近似的數
4 例如floa型的0.1,用二進制表示是001111011 10011001100110011001101
5 化爲十進制是0.100000001490116119384765625
6 所以在一些精密的計算中不能用浮點型直接相加
7 須要借用BigDecimal類
8 */

 浮點數直接相加:ide

1 public class BigDecimal1 {
2     public static void main(String[] args) {
3         System.out.println(0.01+0.09);
4     }
5 
6 }
7 
8 0.09999999999999999

BigDecimal類的成員方法的使用:spa

 1 public class BigDecimal1 {
 2     public static void main(String[] args) {
 3         //建立BigDecimal
 4         BigDecimal bd1=new BigDecimal("0.01");
 5         BigDecimal bd2=new BigDecimal("0.09");
 6         System.out.println("相加的結果爲:"+bd1.add(bd2));
 7         System.out.println("相減的結果爲:"+bd1.subtract(bd2));
 8         System.out.println("相乘的結果爲:"+bd1.multiply(bd2));
 9         System.out.println("相除的結果爲:"+bd2.divide(bd1));
10         System.out.println("保留5位小數後相除的結果爲:"+bd1.divide(bd2,5, BigDecimal.ROUND_HALF_UP));
11     }
12 
13 }
14 
15 
16 相加的結果爲:0.10
17 相減的結果爲:-0.08
18 相乘的結果爲:0.0009
19 相除的結果爲:9
20 保留位數後相除的結果爲:0.11111
相關文章
相關標籤/搜索