徹底解決BigDecimal出現很多位小數問題

1、BigDecimal對象不要構造Double類型小數
比如:

BigDecimal num5 = new BigDecimal(2.225667);
//會損失經度,打印結果:2.225667000000000061987748267711140215396881103515625
System.out.println(num5);
應該改爲寫法:
BigDecimal num5 = new BigDecimal("2.225667");
或者不是double類型的也可以,例如:
BigDecimal num2 = new BigDecimal(2);//這種寫法是可以的

2、多個BigDecimal相加減乘除的結果可能出現類似:
100438.137000000000000002
100438.1370000000
這樣的結果。
觀察過程,比如代碼:

BigDecimal num1 = new BigDecimal("54432.30000122");
    	BigDecimal num2 = new BigDecimal("5.3100440");
    	BigDecimal result = num1.add(num2);
    	//結果爲54437.61004522
    	System.out.println(result);
    	//結果爲54437.6100
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR));
    	//結果爲54437.61
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR).stripTrailingZeros());
    	//假如位數過多有時間會變爲科學計數法,加 toPlainString()則控制不會出現科學計數法
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR).stripTrailingZeros().toPlainString());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章