Почему добавление целого числа 1 к другому целому, а затем приведение к числу с плавающей точкой дает мне 0,99? - PullRequest
0 голосов
/ 26 апреля 2018

Я нахожусь в классе визуального программирования, пытаюсь создать графический интерфейс в обработке, который в конечном итоге будет управлять Arduino MeArm.У меня есть элемент controlP5 для каждого из 4 сервоприводов, значения которых хранятся в виде переменных типа int.

Например, моя переменная для локтя будет иметь вид:

eVal = (int)elbow.getValue();

У меня есть несколько функцийдля хранения последовательности для воспроизведения.Когда шаг выполняется, он проверяет, равно ли текущее значение сохраненному значению, и сложит или вычтет 1, пока не достигнет его.

Вот пример для локтя:

if(eReset){
  if(eVal > currentStep[2])
    eVal --;
  else if(eVal < currentStep[2])
    eVal ++;
  else if(eVal == currentStep[2])
    eReset=false;

  println(eVal);
}

где currentStep - это массив, содержащий значения каждого сервопривода на конкретном шаге.Моя проблема в том, что когда я затем устанавливаю значение сервопривода на новое значение в каждом кадре,

elbow.setValue(eVal);

есть некоторые цифры, где он пытается добавить 0,99 вместо 1. Одно место, о котором я думаюверхняя часть моей головы меняется с 4 до 5, она застревает на 4,99, хотя оператор print будет показывать 5. Это происходит с постоянными интервалами, как это всегда происходит при переходе с 4 на 5 и нескольких других чисел.И я абсолютно не знаю, как это исправить, потому что я работаю только с целыми числами, так что я не уверен, как туда попал float.

Редактировать: Это в функции setup ()-

int eVal = 0;

Slider elbow=cp5.addSlider("Elbow")
  .setRange(-100, 100)
  .setPosition(30, 330)
  .setSize(20, 240)
  .setValue(0);

Затем в функции draw () -

eVal = (int)elbow.getValue();
//checks to see if the GUI needs to change eVal because of sequences
elbow.setValue(eVal);

Проблема возникает, когда я пытаюсь увеличить или уменьшить eVal на 1, а затем установить для него значение локтя.

Например,

//elbow.getValue() = 4.0
eVal = (int)elbow.getValue(); //eVal = 4;
eVal++; //eVal = 5
elbow.setValue(eVal); //elbow.getValue() should = 5

Но по какой-то причине в этой последней строке значение локтя установлено на 4,99, поэтому, когда эти вычисления выполняются в следующем кадре, eVal округляется до 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...