相信大家都可能碰到要對超過17位整數的值進行計算,Java中對double的值超過8位就會變成科學計數法,所以我用了DecimalFormat進行格式化,當pattern為“#################.##”,值為“123456789012345.78”時可以正常顯示;沒有格式化時顯示為1.2345678901234578E14 格式化後為123456789012345.78但值超過15位整數情況就不一樣了,如值為“1234567890123456.78”格式化後為1234567890123456.8,已經進行了四捨五入了。最終查了一下javadoc,發現在java.math包中有一類BigDecimal可以解決大數值的計算問題,還挺不錯,最終解決了問題 。
例://測試BigDecimal
BigDecimal bd=new BigDecimal("12345678901234578.789");
System.out.println("BigDecimal * 12.5="+(bd=bd.multiply(new BigDecimal(12.5))));
System.out.println("BigDecimal / 12.5="+bd.divide(new BigDecimal(12.5)));
輸出為:BigDecimal * 12.5=154320986265432234.8625
BigDecimal / 12.5=12345678901234578.789
完全正確!
注重:BigDecimal使用的時候要注重它在計算機內部表示的形式,new BigDecimal(double)這個構造函數產生的BigDecimal類會變成不可預料,因為在會用0.100000000*******來表示0.1,而用0.29999999*****來表示,假如你沒有對結果進行處理,可能會有bug產生。