2012-02-19 207 views
43

Deseo obtener el valor absoluto de un número en JavaScript. Es decir, deja caer el signo. Sé matemáticamente que puedo hacer esto al cuadrar el número y luego tomar la raíz cuadrada, pero también sé que esto es terriblemente ineficiente.Obtenga el valor absoluto de un número en Javascript

x = -25 
x = x * x 
x = sqrt(x) 

// x would now be 25 

¿Hay alguna forma en JavaScript para simplemente dejar caer el signo de un número que es más eficiente que el enfoque matemático?

+5

'Math.abs (-25); // 25' – davin

+10

¿Nadie ha sugerido la expresión regular? ;-) O 'jQuery.abs()'? –

+0

@DanWalmsley No quise ofenderte. Incluso si no sabes el nombre (que no es un buen punto en el sitio de preguntas y respuestas de un programador, supongo que eso explica los votos a la baja), buscar 'javascript positivo a negativo 'o algo así ayuda. – kapa

Respuesta

87

¿Quieres decir obtener el absolute value de un número? La función de Javascript Math.abs está diseñada exactamente para este propósito.

var x = -25; 
x = Math.abs(x); // x would now be 25 

Aquí están algunos casos de prueba a partir de la documentación:

Math.abs('-1');  // 1 
Math.abs(-2);  // 2 
Math.abs(null);  // 0 
Math.abs("string"); // NaN 
Math.abs();   // NaN 
9

Aquí es una forma rápida de obtener el valor absoluto de un número. Es aplicable en todos los idiomas:

+12

¿Esto supone un número de 32 bits? –

+3

Y el complemento a 2? –

+0

¿JavaScript no usa números de 64 bits (dobles)? –

5

Si desea ver cómo JavaScript implementa esta función bajo el capó, puede consultar esta publicación.

Blog Post

Aquí es la implementación basado en el código fuente de cromo.

function MathAbs(x) { 
    x = +x; 
    return (x > 0) ? x : 0 - x; 
} 
+0

esto es genial, pero realmente no responde la pregunta –

+2

@AndreFigueiredo - Creo que responde bastante bien, aunque definitivamente es un poco escueto. Sugiere que podría usar 'absx = Math.abs (x);' o podría crear una función ('MathAbs') o incluso usar directamente' absx = (x> 0)? x: 0 - x; '. Quizás agregar una declaración similar a la respuesta ayudaría. –

0

Bueno, solo para grabar, otro método simplista podría ser;

var abs = x => Math.sqrt(x*x) 
Cuestiones relacionadas