蓋茨夫婦正式離婚 結束 27 年婚姻
阿新 • • 發佈:2021-08-03
BigDecimal
思考:以下程式輸出結果是多少?
public class Demo05 {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);//0.09999999999999998
double result=(1.4-0.5)/0.9;
System.out.println(result);//0.9999999999999999
}
}
結果不是0.1 也不是1,因為double型別和float型別儲存的都是近似值,存的是1.0,實際上可能是0.99999,再經過各種運算,結果就會出現一定的誤差,但誤差較小。但很多實際應用中需要精確運輸,這時要藉助BigDecimal
BigDecimal
- 位置:java.math包中
- 作用:精確計算浮點數
- 建立方式:BigDecimal bd=new BigDecimal("1.0");
- 方法:
- 加法:BigDecimal add(BigDecimal bd)
- 減法:BigDecimal subtract(BigDecimal bd)
- 乘法:BigDecimal mutiply(BigDecimal bd)
- 除法:BigDecimal divide(BigDecimal bd)
import java.math.BigDecimal; public class Demo05 { public static void main(String[] args) { double d1=1.0; double d2=0.9; System.out.println(d1-d2);//0.09999999999999998 double result=(1.4-0.5)/0.9; System.out.println(result);//0.9999999999999999 //BigDecimal,大的浮點數的精確計算 BigDecimal bd1=new BigDecimal("1.0"); BigDecimal bd2=new BigDecimal("0.9"); //減法 BigDecimal r1=bd1.subtract(bd2); System.out.println(r1);//0.1 //加法 BigDecimal r2=bd1.add(bd2); System.out.println(r2);//1.9 //乘法 BigDecimal r3=bd1.multiply(bd2); System.out.println(r3);//0.90 //除法 BigDecimal r4=new BigDecimal("1.4") .subtract(new BigDecimal("0.5")) .divide(new BigDecimal("0.9")); System.out.println(r4);//1 BigDecimal r5=new BigDecimal("10") //scale:指定精確到小數點後幾位,BigDecimal.ROUND_HALF_UP:四捨五入 .divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP); System.out.println(r5);//3.33 除不盡的時候會報錯,需要保留幾位小數 } }