坑1:初始化使用double類型數據
public class TestBigDecimal {
public static void main(String[] args){
BigDecimal b1=new BigDecimal(0.22);
BigDecimal b2=new BigDecimal("0.22");
System.out.println("b1的值:"+b1);
System.out.println("b2的值:"+b2);
}
}
結果 :
b1的值:
0.2200000000000000011102230246251565404236316680908203125
b2的值:0.22
原因:
構造方法參數為double類型有一定的不可預知性,表面上看是0.22,實際上是0.2200000000000000011102230246251565404236316680908203125,0.22在java中無法準確的表示為double
解決方案:
1.采用String 類型的構造參數。
2.如果必須要使用double,則可使用Double.toString(double) 方法轉換成String, 再采用Bigdecimal的構造函數.
坑2:除法計算
public static void t1(){
BigDecimal b1=new BigDecimal("10");
BigDecimal b2=new BigDecimal("3");
System.out.println(b1.divide(b2).setScale(2,BigDecimal.ROUND_HALF_UP));
}
結果:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result
原因:
當遇到除不盡的情況時,會報以上錯誤
解決方案:
System.out.println(b1.divide(b2,2,BigDecimal.ROUND_HALF_UP));
坑3:equals方法
public static void t2(){
BigDecimal b1=new BigDecimal("0.0");
BigDecimal b2=BigDecimal.ZERO;
System.out.println(b1.equals(b2));
}
結果:
false
原因:
BigDecimal 的equals 方法不僅僅是比較值,還會比較scale的位數是否相等,而Bigdecimal.ZERO的scale是0,所以為 false
解決方案:
使用compareTo方法. System.out.println(b1.compareTo(b2)==0)
-
參數
+關注
關注
11文章
1842瀏覽量
32303 -
Doubler
+關注
關注
0文章
7瀏覽量
7201 -
string
+關注
關注
0文章
40瀏覽量
4739
發布評論請先 登錄
相關推薦
評論