JAVA對大數值的計算

來源:互聯網
上載者:User

相信大家都可能碰到要對超過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產生。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.