2012-02-19 14 views
43

Voglio ottenere il valore assoluto di un numero in JavaScript. Cioè, lascia il segno. So matematicamente che posso farlo quadrando il numero e poi prendendo la radice quadrata, ma so anche che questo è orribilmente inefficiente.Ottieni il valore assoluto di un numero in Javascript

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

// x would now be 25 

C'è un modo in JavaScript per cadere semplicemente il segno di un numero che è più efficiente rispetto alla approccio matematico?

+5

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

+10

Nessuno ha ancora suggerito l'espressione regolare? ;-) Oppure 'jQuery.abs()'? –

+0

@DanWalmsley Non volevo offenderti. Anche se non conosci il nome (che non è un buon punto nel sito di domande e risposte di programmatori, suppongo che questo spieghi i downvotes), la ricerca di 'javascript positivo su numero negativo 'o qualcosa del genere aiuta. – kapa

risposta

87

Intendi come ottenere il numero absolute value? La funzione javascript Math.abs è progettata esattamente per questo scopo.

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

Ecco alcuni casi di test della documentazione:

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

Ecco un modo veloce per ottenere il valore assoluto di un numero. È applicabile in tutte le lingue:

(x^(x >> 31)) - (x >> 31); 
+12

Questo presuppone un numero a 32 bit? –

+3

E il complemento a 2? –

+0

JavaScript non usa numeri a 64 bit (doppi)? –

5

Se si desidera vedere come JavaScript implementa questa funzionalità sotto il cofano è possibile controllare questo post.

Blog Post

Ecco l'implementazione basata sul codice sorgente di cromo.

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

questo è bello, ma in realtà non risponde alla domanda –

+2

@AndreFigueiredo - Penso che risponda abbastanza bene, anche se decisamente un po 'laconico. Sta suggerendo che potresti usare 'absx = Math.abs (x);' oppure potresti creare una funzione ('MathAbs') o anche usare direttamente' absx = (x> 0)? x: 0 - x; '. Forse aggiungere una dichiarazione simile alla risposta potrebbe aiutare. –

0

Beh, solo per registrazione, un altro metodo semplicistico potrebbe essere;

var abs = x => Math.sqrt(x*x) 
Problemi correlati