2013-10-13 4 views
0

У меня возникли проблемы при отправке проблем с дорожкой. Я пытаюсь иметь мою программу, так что, когда я запускаю процедуру updateValues, она отправляет десятичное значение некоторым двойным переменным, которые у меня есть в другом классе «Маятник».
Преобразование значений дорожки дорожки в double

Моя логика такова:

В trackbars использовать только целые значения так, чтобы увеличить в десятичных знаков определенные значения должны быть разделены на 100, так что они правильны в моделирования.
Например, если я хочу, чтобы значение силы тяжести составляло 0,4, то значение моей дорожки должно составлять 40, поэтому 40/100 = 0,40
Другим примером будет угол, который будет составлять от -3 до 3 с шагом в десятки. Таким образом, мы переходим от -300 до 300/100 = 3.

Так, конечно, код решение для этого:

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

После ввода контрольной точки в я обнаружил, что с моей TrackBar значением в 161 маятник угол только 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. 
      } 

переменные в моем классе 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 

Решение Для того, чтобы преобразовать в двойник, как числитель, так и знаменатель должны быть одного типа. В этом случае двойной.

ответ

0

Как насчет явного преобразования?

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

Нет, боюсь, я все еще получаю 1,0 в качестве значения угла. Тем не менее, я знал, что вы можете конвертировать в такие целые числа, но не знали, что можете явно изменить на двойной. Вы учитесь каждый день. –

+0

Попробуйте второй. – Anarion

+1

Лучший способ убедиться, что оба значения являются двойными. 100 не удваивается. 100.0 удваивается. В вашей первой строке вы ничего не делаете (просто выбирая результат, который неправильно вычисляется). Во второй строке вы позволяете 100 понимать неявно (может работать, возможно, нет) – varocarbas

Смежные вопросы