将跟踪栏值转换为双精度值
问题描述:
发送我的跟踪栏问题时出现问题。 我想让我的程序,以便当我运行过程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,分子和分母都必须是属于同一类型。在这种情况下,双重。
答
如何显式转换?
Pendulum.angle = ((double)tbrAngle.Value)/100.0;
不,我怕我仍然得到1.0作为我的角度值。但是,我知道你可以转换为整数,但不知道你可以明确地变成双精度。你每天都在学习。 –
尝试第二个。 – Anarion
确保两种数值都是双倍的最佳方法。 100不是双倍100.0是双倍。在你的第一行中,你没有做任何事情(只是将结果错误地计算出来)。在你的第二行,你让100能够隐含了解(可能会奏效,可能不会) – varocarbas