n 個double相加的問題

來源:互聯網
上載者:User

 先看下面的例子:

public class Test{public static void main(String[] args){double sum=0;double temp=0.38;for(int i=0;i<10;i++){sum=sum+temp;System.out.println("sum:"+sum);System.out.println(sum);}}}

 

程式運行後列印出下面的結果:

 

sum:0.38
0.38
sum:0.76
0.76
sum:1.1400000000000001
1.1400000000000001
sum:1.52
1.52
sum:1.9
1.9
sum:2.28
2.28
sum:2.6599999999999997
2.6599999999999997
sum:3.0399999999999996
3.0399999999999996
sum:3.4199999999999995
3.4199999999999995
sum:3.7999999999999994
3.7999999999999994

 

這並不是我們需要的結果,為啥會這樣呢?

Java中的簡單浮點數類型float和double不能夠進行運算。不光是Java,在其它很多程式設計語言中也有這樣的問題。在大多數情況下,計算的結果是準確的,但是多試幾次(可以做一個迴圈)就可以試出類似上面的錯誤。現在終於理解為什麼要有BCD碼了。  

  這個問題相當嚴重,如果你有9.999999999999元,你的電腦是不會認為你可以購買10元的商品的。  
  在有的程式設計語言中提供了專門的貨幣類型來處理這種情況,但是Java沒有。現在讓我們看看如何解決這個問題。

public class Test{public static void main(String[] args){double sum=0;double temp=0.38;for(int i=0;i<10;i++){  <SPAN style="COLOR: #ff0000">  BigDecimal b1=new BigDecimal(Double.toString(sum));                                    BigDecimal b2=new BigDecimal(Double.toString(temp));</SPAN>                                    sum=b1.add(b2).doubleValue();}    System.out.println("sum"+sum);}}

sum:0.38
sum:0.76
sum:1.14
sum:1.52
sum:1.9
sum:2.28
sum:2.66
sum:3.04
sum:3.42
sum:3.8

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.