1. 程式人生 > >Double運算丟失精度問題以及BigDecimal用法

Double運算丟失精度問題以及BigDecimal用法

一、丟失精度問題還原。

public double add() { 
	double number1 = 1; 
	double number2 = 20.2;
	double number3 = 300.03; 
	double result = number1 + number2 + number3; 
	System.out.println(result); 
	return result; 
}

列印結果:321.22999999999996

二、解決方式。

BigDecimal num1 = new BigDecimal("100");  
BigDecimal num2 = new BigDecimal("50"); 
// 或者
BigDecimal num1 = new BigDecimal(100D);  
BigDecimal num2 = new BigDecimal(50D); 
       
//加法
BigDecimal result1 = num1.add(num2);
out.println("和是   :  " + result1);
     
//減法 
BigDecimal result2 = num1.subtract(num2);
out.println("差是   :  " + result2);
     
//乘法
BigDecimal result3 = num1.multiply(num2);
out.println("積是   :  " + result3);

//除法
BigDecimal result4 = num1.divide(num2);
out.println("商是   :  " + result4);
   
//比較
BigDecimal num = new BigDecimal("100");     //用做比較的值  
out.println(num1.compareTo(num2));            //大於 時,返回 1 
out.println(num.compareTo(num1));            //等於 時,返回 0  
out.println(num2.compareTo(num1));            //小於 時,返回 -1

out.println(num1.min(num2));                //求兩個數的最小值,返回小的數
out.println(num1.max(num2));                //求兩個數的最大值,返回大的數