2017-02-03 18 views
1

Попытка заставить оператора modulo работать в javascript. Это для функции NodeRed, которая принимает значения в массиве. Я могу получить значение avg без оператора modulo, при этом ничего не происходит. Может ли кто-нибудь помочь? Смысл этого, чтобы получить средние углы Правильные с учетом 0-360 градусовПопытка заставить оператора modulo работать в javascript

value1 = {}; 
value2 = {}; 
value3 = {}; 
value4 = {}; 
value5 = {}; 
avg = {}; 


msg.number = msg.payload; 

value1.payload=msg.number[1]; 

value2.payload=msg.number[2]; 

value3.payload=msg.number[3]; 

value4.payload=msg.number[4]; 

avg.payload = (((msg.number[1]+msg.number[2]+msg.number[3]+msg.number[4])/4)%360); 


return avg; 
+0

'**% 360 **' Что это должен делать? Вы можете узнать больше о том, что происходит, если вы посмотрите на консоль. – Gavin

+0

являются ** до и после '% 360' там для акцента или это фактический код? Кроме того, просьба привести примеры входных данных: msg.number [1] - это действительно число? какой диапазон значений? – alebianco

ответ

1

Оператор модуль возвращает остаток от деления между двумя операндами. Похоже, что вы хотите, чтобы средний угол, который будет ваша функция:

((msg.number[1]+msg.number[2]+msg.number[3]+msg.number[4])/4) 

Если вы все еще хотите применить по модулю 360 к этому, вы должны удалить окружающие ** ** и есть это:

avg.payload = ((msg.number[1]+msg.number[2]+msg.number[3]+msg.number[4])/4) % 360; 

Но, добавив «% 360» вы возвращаете среднее значение углов, так как они в теории не будет больше, чем 360. Если вы хотите, остальная часть углов по сравнению с 360 вы можете попробовать это:

avg.payload = 360 % ((msg.number[1]+msg.number[2]+msg.number[3]+msg.number[4])/4); 

и посмотрите, получится ли вам результат, который вы хотели.

Если вы хотите получить больше информации о операторе Я бы обзором JavaScript в Mozilla:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators

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

  • Нет связанных вопросов^_^