2011-01-10 64 views

Respuesta

473

Usted podría utilizar esta ...

Math.abs(x) 
+1

Es posible que desee considerar ~ x + 1. Es bastante rápido, pero no está claro en cuanto a lo que está haciendo. Subió esto para mostrar la diferencia: http://jsperf.com/absolute-int – omgaz

+14

@omgaz No son lo mismo ... 'var x = -100; ~ x + 1 === 100' pero 'var x = 100; ~ x + 1 === -100'. 'Math.abs' siempre lo hace positivo mientras que tomar los complementos simplemente invierte el signo. – jduncanator

+0

Es posible que desee considerar -x. ¡Es bastante rápido! – naiad

10
unsigned_value = Math.abs(signed_value); 
40

Math.abs(x) o si no está seguro de el valor es negativo antes de la conversión simplemente escriba un signo menos regulares: x = -x.

23

El signo menos (-) puede convertir números positivos en negativos y negativos en positivos. x=-y es azúcar visual para x=(y*-1).

var y = -100; 
var x =- y; 
74

¿Qué hay de x *= -1? Me gusta su simplicidad.

+3

+1 por simplicidad y trabajando en ambos sentidos por ejemplo: neg2pos y pos2neg –

+8

Si bien esto es simple, supone que el número siempre será negativo. Si el caso de uso es tal, entonces es increíble. De lo contrario, aconsejaría precaución. – myusuf

+2

No estoy de acuerdo @myusuf. Cualquier número que sea 'x' se invertirá. Si 'x = 23' y se inserta en esa ecuación,' x' será igual a '-23'. En palabras del Sr. Escalante, "Un tiempo positivo un negativo es igual a un negativo. Un tiempo negativo un negativo es un resultado positivo". ... "¿Cómo puedo llegar a estos kiiiiiiids ?!" – ExcellentSP

7
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

Encuentro que esta solución es fácil de entender.

5

Si desea escribir código interesante que nadie más puede actualizar, intente esto:

~ --x

+0

Sin embargo, esto no funcionará con los puntos flotantes ... y el valor de x también cambia. –

+0

Supongo que si no puede cambiar x: ~ --x; ++ x – Kyle

+1

Kyle, el operador '~' convierte el número a un entero de 32 bits. Si tienes un flotador como entrada, se pone una manguera. –

2

he hecho algo como esto a mí mismo.

num<0?num*=-1:''; 

comprueba si el número es negativo y si lo es, multiplicar por -1 Esto no devolver un valor, su hasta usted si captura él. En caso de que desee asignar 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 lo que su objetivo es. Para mí fue simple, hacer que sea positivo si es negativo, de lo contrario no hacer nada. De ahí el '' en el código. En este caso he usado causa operador terciario que quería, podría muy bien ser:

if(num<0)num*=-1; 

vi la solución a nivel de bits aquí y quería comentar sobre eso también.

~--num; //Drawback for this is that num original value will be reduced by 1 

Este soultion es muy elegante en mi opinión, podríamos reescribir así:

~(num = num-1); 

En términos simples, tomamos el número negativo, tomamos una distancia de ella y luego a nivel de bits invertirla . Si lo hubiéramos invertido en modo bit, obtendríamos un valor 1 demasiado pequeño. También puede hacer esto:

~num+1; //Wont change the actual num value, merely returns the new value 

que va a hacer lo mismo, pero va a invertir primero y luego añadir 1 al número positivo. A pesar de que no puede hacer esto:

~num++; //Wont display the right value. 

que no funciona causa de precedence, operadores de sufijo como num++ serían evaluados antes ~ y la razón prefijo ++num molestaría trabajar a pesar de que está en la misma precedencia que a nivel de bits NO (~), es porque se evalúa de derecha a izquierda. Intenté cambiarlos, pero parece que el prefijo es un poco quisquilloso en comparación con el NOT bit a bit. El +1 funcionará porque '+' tiene una precedencia más alta y se evaluará más adelante.

Encontré que la solución era bastante divertida y decidí expandirme en ella, ya que simplemente estaba arrojada allí y las personas que la miraban probablemente la estaban ignorando. Aunque sí, no funcionará con flotadores.

Espero que esta publicación no se haya alejado de la pregunta original. :/

0

JavaScript - sin usar funciones:

var x=-9; 
 
var x=((x*x)**0.5); 
 
console.log(x);

NOTA: puede que no funciona en los navegadores antiguos.

3

Sé que esto es un poco tarde, pero para las personas que luchan con esto, se puede utilizar

en la conversión de negativo a positivo

let x = -54; 
let result = Math.abs(x); 

en la conversión de positivo a negativo

let x = 54; 
let result = -Math.abs(x) 

O simplemente podría hacer este breve método.

en la conversión de positivo a negativo & viceversa

let x = -23; 
let result = -(23) 
0

Puede utilizar ~ operador que lógicamente convierte el número a negativo y se suma 1 al negativo:

var x = 3; 
 
x = (~x + 1); 
 
console.log(x) 
 
// result = -3

2

Mi enfoque mínima

Para la conversión de número negativo a positivo & viceversa

var num = -24; 
 
num -= num*2; 
 
console.log(num) 
 
// result = 24

0

sé otra manera de hacerlo.Esta técnica funciona negativo a positivo & 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);

+0

Eso no responde la pregunta. dave solicita una función que cambie el valor * negativo a positivo * y * positivo a positivo *. – RaphaMex

+0

Su pregunta dice "¿Existe una función matemática en JavaScript que convierta los números en valores positivos?" Él no menciona positivo a positivo. Solo menciona de negativo a positivo. ¿Por qué querrías convertir positivo en positivo? El valor sería el mismo –

+0

Puede solicitar aclaraciones en un comentario debajo de la pregunta. De todos modos, hay una respuesta aceptada que es la correcta. Puedes volver a leerlo y ver que hay una función incorporada que ... convierte de positivo a positivo. – RaphaMex

Cuestiones relacionadas