相信大家都可能碰到要對超過17位整數(shù)的值進(jìn)行計算,Java中對double的值超過8位就會變成科學(xué)計數(shù)法,所以我用了DecimalFormat進(jìn)行格式化,當(dāng)pattern為“#################.##”,值為“123456789012345.78”時可以正常顯示;沒有格式化時顯示為1.2345678901234578E14 格式化后為123456789012345.78但值超過15位整數(shù)情況就不一樣了,如值為“1234567890123456.78”格式化后為1234567890123456.8,已經(jīng)進(jìn)行了四舍五入了。最終查了一下javadoc,發(fā)現(xiàn)在java.math包中有一類BigDecimal可以解決大數(shù)值的計算問題,還挺不錯,最終解決了問題 。
例://測試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使用的時候要注重它在計算機內(nèi)部表示的形式,new BigDecimal(double)這個構(gòu)造函數(shù)產(chǎn)生的BigDecimal類會變成不可預(yù)料,因為在會用0.100000000*******來表示0.1,而用0.29999999*****來表示,假如你沒有對結(jié)果進(jìn)行處理,可能會有bug產(chǎn)生。
例://測試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使用的時候要注重它在計算機內(nèi)部表示的形式,new BigDecimal(double)這個構(gòu)造函數(shù)產(chǎn)生的BigDecimal類會變成不可預(yù)料,因為在會用0.100000000*******來表示0.1,而用0.29999999*****來表示,假如你沒有對結(jié)果進(jìn)行處理,可能會有bug產(chǎn)生。