2013-02-17 140 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