Java中double類型數據的精度問題


今天在寫段代碼模擬計算器的時候,偶然發現,當我進行小數運算的時候,竟然出現了令我驚訝的結果,后來問了問度娘,才曉得,原來這里面還有點知識呢,下面是介紹:

你猜下面幾句的結果是多少?

1 public class  Demo{       
2         @Test
3     public void demo3() {
4         System.out.println(1 - 0.42);
5         System.out.println(2.4 + 1.2);
6         System.out.println(4.015 * 100);
7         System.out.println(123.1 / 100);
8     }
9  }    

但我想告訴你,在控制台上輸出的結果是:

0.5800000000000001
3.5999999999999996
401.49999999999994
1.2309999999999999

那么對應的解決方案是啥呢?

我這里給出了一段代碼:

1 public class Demo{
2   @Test
3     public void demo3() {
4         BigDecimal bd = new BigDecimal("1");
5         System.out.println(bd.subtract(new BigDecimal("0.42")));
6     }  
7 }

這段代碼就告訴了你,當你用到浮點數的時候,為避免出現精度失真的情況,可以用BigDecimal來計算,注意:BigDecimal的構造器中,你傳入的是字符串喲!!

如果你還想進行加法、乘法、除法的話,推薦你看看JDK中java.lang.math這個包下的BigDecimal具體方法,可以滿足你的一般需求(包括小數點后保留幾位等),當然,要是你覺得這樣還是不夠簡便的話,你完全可以自己寫個tool類,來專門完成你的運算,內部就用BigDecimal來實現,用的時候,你想怎么調用怎么調用(前提是你的tool類中要封裝好這些方法)。

嘿嘿,就這些了!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM