Respuestas:
var x = -100; ~x+1 === 100pero var x = 100; ~x+1 === -100. Math.abssiempre lo hace positivo mientras toma el complemento unos, simplemente invierte el signo.
¿Qué hay de x *= -1? Me gusta su simplicidad.
xserá volteado. Si x = 23y se empuja en esa ecuación, xserá igual -23. En palabras del Sr. Escalante, "Un positivo por un negativo es igual a un negativo. Un negativo por un negativo es igual a un positivo". ... "¿Cómo llego a estos kiiiiiiids ?!"
x=23, entonces se convertirá en -23. Como dice la pregunta, 'Convierta un número negativo en un número positivo en JS', pero lo anterior cambiará cualquier número, ya sea positivo o negativo.
xsiempre sea positivo. Mis disculpas @myusuf.
El signo menos (-) puede convertir números positivos en números negativos y números negativos en números positivos. x=-yes azúcar visual para x=(y*-1).
var y = -100;
var x =- y;
Si desea escribir un código interesante que nadie más pueda actualizar, intente esto:
~ --x
~operador convierte el número a un entero de 32 bits. Si tiene un flotador como entrada, se manguera.
Sé que esto es un poco tarde, pero para las personas que luchan con esto, pueden usar las siguientes funciones:
Convierte cualquier número positivo
let x = 54;
let y = -54;
let resultx = Math.abs(x); // 54
let resulty = Math.abs(y); // 54Convertir cualquier número negativo
let x = 54;
let y = -54;
let resultx = -Math.abs(x); // -54
let resulty = -Math.abs(y); // -54Invierte cualquier número
let x = 54;
let y = -54;
let resultx = -(x); // -54
let resulty = -(y); // 54Negativo a positivo
var X = -10 ;
var number = Math.abs(X); //result 10
Positivo a negativo
var X = 10 ;
var number = (X)*(-1); //result -10
Multiplicar por (-1) es la forma más rápida de convertir un número negativo en positivo. ¡Pero debes tener cuidado de no convertir mi error en un número positivo a negativo! Por lo tanto, se necesita un control adicional ...
Entonces Math.abs, Math.floor y parseInt es el más lento.
https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1
Hice algo como esto yo mismo.
num<0?num*=-1:'';
Comprueba si el número es negativo y si lo es, multiplícalo por -1. Esto devuelve un valor, depende de ti si lo capturas. En caso de que desee asignarlo a algo, probablemente debería hacer algo como:
var out = num<0?num*=-1:num; //I think someone already mentioned this variant.
Pero realmente depende de cuál es tu objetivo. Para mí fue simple, hacerlo positivo si es negativo, de lo contrario no hacer nada. De ahí el '' en el código. En este caso, utilicé el operador terciario porque quería, podría muy bien ser:
if(num<0)num*=-1;
Vi la solución bit a bit aquí y quería comentar sobre eso también.
~--num; //Drawback for this is that num original value will be reduced by 1
Esta idea es muy elegante en mi opinión, podríamos reescribirla así:
~(num = num-1);
En términos simples, tomamos el número negativo, le quitamos uno y luego lo invertimos bit a bit. Si lo hubiéramos invertido a nivel de bits, normalmente obtendríamos un valor 1 demasiado pequeño. También puedes hacer esto:
~num+1; //Wont change the actual num value, merely returns the new value
Eso hará lo mismo pero invertirá primero y luego sumará 1 al número positivo. Aunque NO PUEDES hacer esto:
~num++; //Wont display the right value.
Eso no funcionará por causa de precedencia , los operadores de postfix como num++se evaluarían antes de ~ y el prefijo de razón ++numno funcionaría aunque tenga la misma precedencia que NO a nivel de bit (~), es porque se evalúa de derecha a izquierda. Intenté intercambiarlos, pero parece que el prefijo es un poco complicado en comparación con NO a nivel de bits. El +1 funcionará porque '+' tiene una prioridad más alta y se evaluará más adelante.
Encontré que la solución era bastante divertida y decidí ampliarla, ya que se la arrojó allí y las personas que la miraron probablemente la ignoraron. Aunque sí, no funcionará con carrozas.
Espero que esta publicación no se haya alejado de la pregunta original. : /
Mi enfoque minimo
Para convertir un número negativo a positivo y viceversa
var num = -24;
num -= num*2;
console.log(num)
// result = 24
Puede usar el operador ~ que convierte lógicamente el número a negativo y agrega 1 al negativo:
var x = 3;
x = (~x + 1);
console.log(x)
// result = -3
Sé otra forma de hacerlo. Esta técnica funciona de negativo a positivo y viceversa.
var x = -24;
var result = x * -1;
Viceversa:
var x = 58;
var result = x * -1;
CÓDIGO EN VIVO
// NEGATIVE TO POSITIVE: ******************************************
var x = -24;
var result = x * -1;
console.log(result);
// VICE VERSA: ****************************************************
var x = 58;
var result = x * -1;
console.log(result);
// FLOATING POINTS: ***********************************************
var x = 42.8;
var result = x * -1;
console.log(result);
// FLOATING POINTS VICE VERSA: ************************************
var x = -76.8;
var result = x * -1;
console.log(result);
Para una programación funcional, Ramda tiene un buen método para esto. El mismo método funciona yendo de positivo a negativo y viceversa.
Si desea que el número sea siempre positivo, no importa lo que pueda hacer.
function toPositive(n){
if(n < 0){
n = n * -1;
}
return n;
}
var a = toPositive(2); // 2
var b = toPositive(-2); // 2
También puedes probar esto, pero no lo recomiendo:
function makePositive(n){
return Number((n*-n).toString().replace('-',''));
}
var a = makePositive(2); // 2
var b = makePositive(-2); // 2
El problema con esto es que podría cambiar el número a negativo, luego convertirlo en una cadena y eliminar el - de la cadena, y luego volver a convertirlo en int. Lo cual supongo que requeriría más procesamiento que simplemente usar la otra función.
He probado esto en php y la primera función es más rápida, pero a veces JS hace algunas locuras, por lo que no puedo decir con certeza.
n*-ndebería ser n*-1. Sin embargo, eliminaría el ejemplo por completo, ya que las conversiones de tipo y la llamada al método son muy ineficientes en comparación con la simplicidad del primer ejemplo. Incluso la peculiaridad de JS no puede ayudar aquí