2013-06-20 15 views
0

因此,我有一些代碼將圖形縮放到用戶屏幕的大小,方法是將「理想」屏幕的大小除以用戶屏幕的大小。她是我在做什麼的代碼片段:Java對四分之一的結果進行四捨五入,當它不應該爲

public void setScaleFactor(GameContainer ui) { 
    scaleFactorWidth = 2880/ui.getWidth(); 
    scaleFactorHeight = 1800/ui.getHeight(); 

    System.out.println("Screen measured as: " 
      + Integer.toString(ui.getWidth()) + "x" 
      + Integer.toString(ui.getHeight())); 

    System.out.println("Scale factors are: " 
      + Double.toString(scaleFactorWidth) + " " 
      + Double.toString(scaleFactorHeight)); 

    textScale = (scaleFactorWidth + scaleFactorHeight)/2; 

    System.out.println("Text scale is: " + Double.toString(textScale)); 
} 

現在,如果我在我的電腦(Mac的親書與1440的屏幕分辨率)上運行這個出落得是「scaleFactorWidth」設置爲2.0和「scaleFactorHeight」被設置爲2.0,這是預期的,因爲我的屏幕恰好是目標大小的一半。但如果在具有不同分辨率屏幕的計算機上運行此代碼,那麼scaleFactors似乎會四捨五入,我在1024x600的屏幕上運行測試,「scaleFactorWidth」設置爲2.0「scaleFactorHeight」設置爲3.0已經是2.8125 x 3.0。

這是在Java內的某種舍入錯誤,如果是這樣,我該如何解決它?

編輯:感謝所有幫助,我已經意識到我是非常愚蠢的,因爲所有我需要做的是添加1.0至2880和1800

+2

2880/ui.getWidth();返回一個整數。試試2880.0?我也不確定ui.getWidth返回什麼。 – kingdamian42

+0

'scaleFactorWidth'和'ui.getWidth()'的類型是什麼?如果'scaleFactorWidth'是'double'並且'ui.getWidth()'是'int',則使用'2880.0/ui.getWidth();' – johnchen902

回答

3

在這些線路

scaleFactorWidth = 2880/ui.getWidth(); 
scaleFactorHeight = 1800/ui.getHeight(); 

該計算本身是基於整數的(根據後續調用Integer.toString())。只是結果被輸出到double

使用此代碼,而不是爲了有實際的計算中使用double值:

scaleFactorWidth = 2880.0/ui.getWidth(); 
scaleFactorHeight = 1800.0/ui.getHeight(); 

scaleFactorWidth = 2880.0/(double)ui.getWidth(); 
scaleFactorHeight = 1800.0/(double)ui.getHeight(); 
+0

感謝您的幫助。 – unreturnable

1

如果你在談論這個GameContainer類,getWidth()getHeight()的回報INT。

所以,你必須將它轉換爲雙

scaleFactorWidth = (double)2880/ui.getWidth(); 
scaleFactorHeight = (double)1800/ui.getHeight(); 
+0

@ johnchen902不,你錯了。 '(double)2880/ui.getWidth();'='((double)2880)/ ui.getWidth();'。 –

1

其轉換爲雙。

scaleFactorWidth = (Double)2880/ui.getWidth(); 
    scaleFactorHeight = (Double)1800/ui.getHeight(); 
0

ui.getWidth和ui.getHeight()返回您詮釋,當你在INT返回執行操作再次詮釋。所以把你的int值轉換成Double。

Double scaleFactorWidth = new Double(2880)/new Double(ui.getWidth()); 
Double scaleFactorHeight = new Double(1800)/new Double(ui.getHeight()); 

檢查以下樣品,

public static void main(String[] args) { 
      Double scaleFactorWidth = new Double(2880)/new Double(1024); 
      Double scaleFactorHeight = new Double(1024)/new Double(600); 


      System.out.println("Scale factors are: " 
        + Double.toString(scaleFactorWidth) + " " 
        + Double.toString(scaleFactorHeight)); 

      Double textScale = (scaleFactorWidth + scaleFactorHeight)/2; 

      System.out.println("Text scale is: " + Double.toString(textScale)); 
     } 

輸出:

Scale factors are: 2.8125 1.7066666666666668 
Text scale is: 2.2595833333333335