Me gustaría sujetar cálculos en el rango de 0-360 en mi programa. Sé que si tiene un entero de 8 bits que agrega 255 + 1 se desbordará a 0 y, de la misma manera, 0 - 1 se desbordará a 255. Escribí esta función como prueba:
//only for negative numbers function clampTo360 (a) { if (a < 0) { var b = 361 + a; if (b > 0) { return b; } else { clampTo360(b); } } }¿Hay una mejor manera de codificar una función para que el cálculo 0 - 1 devuelva 360?
Puede agregar 360 para obtener un valor positivo y devolver el resto.
function clampTo360(g) { const rest = g % 360; return rest < 0 ? 360 + rest : rest } console.log(clampTo360(365)); // 5 console.log(clampTo360(-5)); // 355 console.log(clampTo360(700)); // 340 console.log(clampTo360(-700)); // 20Puede hacer uso del operador de módulo aquí. Sin embargo, las entradas desbordadas darán como resultado valores negativos.
Para evitar eso, puede sumar 360 para obtener un número en el intervalo [0; 720) , y aplique el operador módulo nuevamente para obtener un resultado entre 0 y 360 :
function clampTo360(g) { return (g % 360 + 360) % 360 } console.log(clampTo360(720)) console.log(clampTo360(360)) console.log(clampTo360(-360)) console.log(clampTo360(-720))