2013-02-17 134 views
0

下面是我正在使用的代碼。爲什麼這不起作用?

我想輸出是1.65,但我得到0

這似乎是範圍問題。但是我已經聲明變量t是靜態的,那麼爲什麼輸出仍然是0?

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public static double t; 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      for (int i = 0; i < 100; i = i + 1) 
      { 
       t = (i * (1/60)); 
      } 
      MessageBox.Show(Convert.ToString(t)); 
     } 
    } 
} 
+3

重新設置了循環的每次迭代T的值,所以整個循環是毫無意義的,並歸結爲'T =(99 * 1/60)' – 2013-02-17 21:59:51

回答

10

1/60將始終爲0

你正在做integer division

在除法操作中,如果需要double結果,至少需要其中一個操作數爲double

更改:

t = (i * (1/60)); 

要:

t = (i * (1/60D)); 

或者:

t = (i * (1D/60)); 

將解決這個問題。

+1

+1雙常數,而不是鑄造:) – 2013-02-17 22:01:31

+0

@lazyberezovsky - 雙_literal_;) – Oded 2013-02-17 22:03:29

+0

是的,看起來像上午2時,文字看起來像常量:) – 2013-02-17 22:04:59

4

當你除以整數值,你會得到一個整數。 1/60產生零。將其中一個操作數加倍(double)1/60以獲得正確的雙重結果。或者,在這種情況下使用常量時,可以使用雙字而不是整數文字。

2

你爲什麼要做100個部門,但只顯示一次消息框?這是因爲相同的:

t = (99 * (1/60)); 
MessageBox.Show(Convert.ToString(t)); 
+0

這不是「問題」在這裏。仍然是對的;) – jAC 2013-02-17 22:03:13

+0

這只是我在彈丸運動模擬程序中使用的一些調試代碼片段! :) – user1920206 2013-02-17 22:04:07