之前很少使用這樣的一個對象BigDecimal,今天在改需求的時候遇到了,結果坑爹的怎么相加最后都為零。
代碼如下:
- BigDecimal totalAmount = new BigDecimal(0);
- totalAmount.add(new BigDecimal(5000));
- System.out.println(totalAmount);
輸出結果為0。
查資料后才知道,要這樣寫才行:
- BigDecimal totalAmount = new BigDecimal(0);
- totalAmount = totalAmount.add(new BigDecimal("5000"));
- System.out.println(totalAmount);
同時,在new一個BigDecimal對象的時候,最好傳入字符串或者int類型的數字,因為傳入double類型的數字會有很神奇的事情發生,
比如說:
- BigDecimal totalAmount = new BigDecimal(0);
- totalAmount = totalAmount.add(new BigDecimal(0.59));
- System.out.println(totalAmount);
輸出結果:
0.58999999999999996891375531049561686813831329345703125
但是如果傳入的是String類型的數字:
- BigDecimal totalAmount = new BigDecimal(0);
- totalAmount = totalAmount.add(new BigDecimal("0.59"));
- System.out.println(totalAmount);
輸出結果:
0.59
至於為什么會這樣子,小弟才疏學淺。。請看此文:BigDecimal 的那些坑事兒