環路

2014-02-10 30 views
0

同時添加值我試圖閩之間增加值1.12和最大值環路

Min = 1.3 
Max = 6.9 

1.3 + 1.12 = 2.42 
2.42 + 1.12 = 3.54 

,直到它達到最大值。

我所做的是

double sum = 0,BucWidth = 1.12; 
sum = min + BucWidth ; 
while(sum != max){ 
    sum = sum +BucWidth ; 
    System.out.println("SUmmmmm" + sum); 
} 

但是當總和達到最大值它沒有停止。

我做錯了什麼。

PLS推薦

回答

7
while (sum <= max) { 
    sum = sum + BucWidth; // or sum += bucWidth; 
    System.out.println("SUmmmmm" + sum); 
} 

你應該檢查它是否是小於或等於,而不是是否是不等於在你的while條件,因爲你想,當它退出循環達到極限。

+0

謝謝Gautham。 –

+1

作爲一個方面說明,建議遵循Java命名約定:'bucWidth'而不是'BucWidth' – Christian

+3

@UnmeshaSreeVeni:你需要這樣做的原因是因爲浮點數不能在數字計算機上以100%的精度表示。雖然'1.3 + 5 * 1.12'應該== 6.9,它不會完全相同,而是非常接近。 –

4

一般來說,比較浮點數的準確性相等是需要麻煩的,除非您深入瞭解精確到何處和何時會發生舍入。使用<而不是!=會更安全,因爲該值可能永遠不會與您所期望的值完全匹配。

(這煩惱是許多原因,編程語言有int和float作爲單獨的數據類型之一。)

0

浮點數或long double型,可能會發生這樣做數學運算,比如增加一個值,另一個值可能不等於您在整數加法運算中假定的值。

int a=6; 
while(sum!=12) 
{ 
sum+=sum; 
} 

這重複一次。

考慮這個

double a=7.4564; 
    double b=7.4567; 
      if(a==b){ 
       System.out.println("Both are equal"); 
      } 
    else{ 
    System.out.println("Both are unequal"); 
    } 

輸出:導向軸是不平等

這是因爲小數點後一些數字可以改變,所以當像操作=正在使用的號碼必須是準確的一切!使用的小數位或邏輯將不起作用。因此,在比較總和與最大值時,最好使用< =而不是!=。