我在发送轨迹栏问题时遇到问题。我试图让我的程序运行程序 updateValues 时,它会将十进制值发送到我在另一个类“Pendulum”中的一些双变量。
我的逻辑是这样的:
轨迹条仅使用整数值,因此要以小数形式递增某些值必须除以 100,因此它们在模拟中是正确的。
例如,如果我希望重力为 0.4,我的轨迹条值必须为 40,因此 40 / 100 = 0.40
另一个示例是角度将从 -3 变为 3,以小数形式递增。所以我们从 -300 到 300 /100 = 3。
所以肯定的代码解决方案是:
Pendulum.angle = (tbrAngle.Value / 100);
设置断点后,我发现我的轨迹栏值为 161 时,摆角仅变为 1.0。
那么究竟发生了什么?这是带有上下文中值的整个方法(仅供参考):
在 frmPendulm 类中:Form
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.
}
我的类 Pendulum 中的变量:
//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
解决方案 为了转换为双精度,分子和分母必须是相同的类型。在这种情况下是双倍的。