2013-10-13 64 views
0

发送我的跟踪栏问题时出现问题。 我想让我的程序,以便当我运行过程updateValues它发送一个十进制值的一些双变量,我在另一个类“钟摆”。
将跟踪栏值转换为双精度值

我的逻辑是这样的:

的trackbars只使用整数值,以便以小数 某些值必须由100被划分来递增,从而它们在 模拟正确的。
例如,如果我希望重力为0.4,我的轨迹栏值必须是40,所以40/100 = 0.40
另一个示例将是角度从-3到3的小数点增加。所以我们去从-300〜300个/ 100 = 3

所以肯定这个代码的解决方案是:

Pendulum.angle = (tbrAngle.Value/100); 

把一个断点在我之后发现,与161的我的TrackBar值摆角仅变为1.0。

那到底究竟是怎么回事? 这里是整个方法在上下文(仅供参考)值:

内frmPendulm类:表

private void UpdateValues() 
       { 

       Pendulum.length = tbrLength.Value; //length is ok as it is an integer 
       Pendulum.angle = (tbrAngle.Value/100); //Not working. 
       //acceleration is calculated so isn't sent 
       Pendulum.aVel = tbrAVel.Value; //must convert 
       Pendulum.damping = tbrDamp.Value; //must convert 
       Pendulum.gravity = tbrGrav.Value; //must convert 
       //This method is run on a button click. 
      } 

在我班上摆的变量:

//all public static so they are actually global (can be used between classes and not just global to this class). 
     public static int length = 10;//length of arm /** can't be less than 0 or will break. 
     public static double angle = 0; //pendulums arm angle 
     public static double aAcc = 0.00; //Angle acceleration - calculated 
     public static double aVel = 0.00; //anglular velocity 
     public static double damping = 0.000; //friction 
     public static double gravity = 0.0; //make gravity a constant 

解决方案 为了转换为double,分子和分母都必须是属于同一类型。在这种情况下,双重。

回答

0

如何显式转换?

Pendulum.angle = ((double)tbrAngle.Value)/100.0; 
+0

不,我怕我仍然得到1.0作为我的角度值。但是,我知道你可以转换为整数,但不知道你可以明确地变成双精度。你每天都在学习。 –

+0

尝试第二个。 – Anarion

+1

确保两种数值都是双倍的最佳方法。 100不是双倍100.0是双倍。在你的第一行中,你没有做任何事情(只是将结果错误地计算出来)。在你的第二行,你让100能够隐含了解(可能会奏效,可能不会) – varocarbas