2013-12-16 37 views
-3

我有兩個我的變量沒有正確分割的問題。我初始化了它們,除了「yFactor」之外,它們都運行正常。 這裏的代碼是導致我的問題的片段:爲什麼我的變量沒有正確分割?

 range = maximum - minimum; 
     try{ 
      heightFactor = (580.0/range); 
     } catch (Exception e){ 
      heightFactor = 0.0; 
     } 
     try{ 
      yFactor = (maximum/range); 
     } catch (Exception e){ 
      yFactor = 1.0; 
     } 
     System.out.println(currentSavings); 
     System.out.println(savingsBeforeRetirement); 
     System.out.println(savingsAfterRetirement); 
     System.out.println(minimum); 
     System.out.println(maximum); 
     System.out.println(range); 
     System.out.println(heightFactor); 
     System.out.println(yFactor); 

這段代碼的輸出是

-318.3508771930617 
10958 
-318 
-318 
10958 
11276 
0.05143667967364313 
0.0 

注意,以上每一個變量是我除了用於輸入參數「正確的」 yFactor。

這裏是我的這個類完整的代碼,如果你需要它:http://pastebin.com/UnHUEdZM

非常感謝任何幫助任何人都可以提供!

編輯:MAX,MIN,範圍,和savingsbeforeretirement是savingsafterretirement整數和heightFactor和yFactor雙打

+2

什麼類型是範圍,最大值和最小值? – k4sia

+0

你能澄清一下你的變量是什麼類型,例如int和double嗎? – Gagravarr

回答

1

我的猜測是,範圍和最大是int類型的,所以分割將產生0。此被轉換爲(雙或浮動)yFactor並且將具有0.0

+0

謝謝!它現在正常工作!我之前就假設分數會導致雙倍的結果。 – Timestretch

0

兩個maximumrange被定義爲int值,所以用

yFactor = (maximum/range); 

執行的整數迪維sion,在你的情況下,結果與0正確。

如果你想有浮動師,你要投至少一個值浮動:

yFactor = ((float)maximum/range); 
0

這裏的問題是,你的整數,這將導致一個0變更執行除法您的int s到float s或double s。另一種選擇是,如果在分割之前將它們投射到float/double

0

從你的貼斌,我看你有:

int maximum; 
int minimum;    
int range; 

你的部門將在整數運算被正在開展。也就是說,任何小數部分都會丟失。

爲了補救,促進數字浮點之一:

yFactor = (double)maximum/range; 

該部門將隨後在浮點進行。

相關問題