坑1:初始化使用double類型數(shù)據(jù)
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);
}
}
結(jié)果 :
b1的值:
0.2200000000000000011102230246251565404236316680908203125
b2的值:0.22
原因:
構(gòu)造方法參數(shù)為double類型有一定的不可預(yù)知性,表面上看是0.22,實(shí)際上是0.2200000000000000011102230246251565404236316680908203125,0.22在java中無法準(zhǔn)確的表示為double
解決方案:
1.采用String 類型的構(gòu)造參數(shù)。
2.如果必須要使用double,則可使用Double.toString(double) 方法轉(zhuǎn)換成String, 再采用Bigdecimal的構(gòu)造函數(shù).
坑2:除法計(jì)算
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));
}
結(jié)果:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result
原因:
當(dāng)遇到除不盡的情況時(shí),會(huì)報(bào)以上錯(cuò)誤
解決方案:
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));
}
結(jié)果:
false
原因:
BigDecimal 的equals 方法不僅僅是比較值,還會(huì)比較scale的位數(shù)是否相等,而Bigdecimal.ZERO的scale是0,所以為 false
解決方案:
使用compareTo方法. System.out.println(b1.compareTo(b2)==0)
-
參數(shù)
+關(guān)注
關(guān)注
11文章
1867瀏覽量
32867 -
Doubler
+關(guān)注
關(guān)注
0文章
7瀏覽量
7266 -
string
+關(guān)注
關(guān)注
0文章
40瀏覽量
4866
發(fā)布評(píng)論請(qǐng)先 登錄
R128點(diǎn)屏踩坑筆記

坑死創(chuàng)業(yè)者的硬件產(chǎn)品——“十大坑”
NodeMCU開發(fā)板踩坑經(jīng)歷分享
mongoose開發(fā)中遇到的坑及解決方案
入坑大學(xué)時(shí)光、單片機(jī)開發(fā),嵌入式網(wǎng)站推薦

關(guān)于藍(lán)橋杯單片機(jī)開發(fā)板矩陣鍵盤的一些坑

ESP-32開發(fā)踩坑歷程(三)ESP-IDF 定時(shí)器使用

評(píng)論