Converti un numero negativo in uno positivo in JavaScript


308

Esiste una funzione matematica in JavaScript che converte i numeri in valore positivo?

Risposte:


704

Potresti usare questo ...

Math.abs(x)

Math​.abs()| MDN


1
Potresti anche prendere in considerazione ~ x + 1. È abbastanza veloce, ma non è chiaro cosa stia facendo. Ho installato questo per mostrare la differenza: jsperf.com/absolute-int
omgaz

22
@omgaz Non sono gli stessi ... var x = -100; ~x+1 === 100ma var x = 100; ~x+1 === -100. Math.abslo rende sempre positivo mentre prendere il complemento inverte semplicemente il segno.
jduncanator,

Potresti anche considerare -x. È abbastanza veloce!
Amara,

93

Che dire x *= -1? Mi piace la sua semplicità.


17
Mentre questo è semplice, si presume che il numero sarà sempre negativo. Se il caso d'uso è tale, allora è fantastico. Altrimenti, consiglierei cautela.
myusuf,

4
Non sono d'accordo con @myusuf. Qualsiasi numero presente xverrà capovolto. Se x = 23e viene inserito in tale equazione, xsarà uguale -23. Nelle parole del signor Escalante, "Un positivo per un negativo è uguale a un negativo. Un negativo per un negativo è uguale a un positivo". ... "Come raggiungo questi kiiiiiiids ?!"
ExcellentSP

2
Esattamente @Shane ieri. Se x=23, allora diventerà -23. Come va la domanda, "Converti un numero negativo in un numero positivo in JS", ma quanto sopra capovolge qualsiasi numero, sia esso positivo o negativo.
myusuf,

2
Inteso. La mia interpretazione del tuo commento è stata nel contesto di capovolgere il numero e non renderlo xsempre positivo. Mi scuso @myusuf.
ExcellentSP

1
ricorda solo che questa soluzione non si applica ai numeri Float, ottiene solo la parte decimale
Oscar Luza,

46

Math.abs(x)o se si è certi il valore è negativo prima della conversione basta anteporre un segno meno regolare: x = -x.


29

Il segno meno (-) può convertire numeri positivi in ​​numeri negativi e numeri negativi in ​​numeri positivi. x=-yè lo zucchero visivo per x=(y*-1).

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


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

Trovo questa soluzione facile da capire.


8

Se desideri scrivere un codice interessante che nessun altro potrà mai aggiornare, prova questo:

~ --x


1
Tuttavia, questo non funziona con i punti mobili ... e cambia anche il valore di x.
Alexis Wilke,

Immagino che se non puoi cambiare x: ~ --x; ++ x
Kyle il

1
Kyle, l' ~operatore converte il numero in un numero intero a 32 bit. Se hai un float come input, viene eliminato.
Alexis Wilke,

7

So che è un po 'tardi, ma per le persone che lottano con questo, puoi usare le seguenti funzioni:

  • Trasforma qualsiasi numero in positivo

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
  • Trasforma qualsiasi numero in negativo

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
  • Invertire qualsiasi numero

    let x =  54;
    let y = -54;
    let resultx = -(x);         // -54
    let resulty = -(y);         //  54

6

Da negativo a positivo

var X = -10 ;
var number = Math.abs(X);     //result 10

Da positivo a negativo

var X = 10 ;
var number = (X)*(-1);       //result -10

Vedo quello che vuoi mostrare ma il modo in cui lo metti è confuso. Forse dovresti dichiarare: a positivo: usa abs, a negativo: abs (x) * -1. In questo modo non implica quale sia l'ex segno X.
Dionys,

5

Moltiplicare per (-1) è il modo più veloce per convertire un numero negativo in positivo. Ma devi stare attento a non convertire il mio errore in un numero positivo in negativo! Quindi è necessario un controllo aggiuntivo ...

Quindi Math.abs, Math.floor e parseInt sono i più lenti.

inserisci qui la descrizione dell'immagine

https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1


1
Alcuni di noi dimenticano quanto possa essere utile la matematica di base in questi casi. Grazie per avermi ricordato di tanta semplicità.
Alexander Dixon,

2

Ho fatto qualcosa del genere da solo.

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

Verifica se il numero è negativo e, se lo è, moltiplicalo per -1 Questo restituisce un valore, dipende da te se lo acquisisci. Nel caso in cui tu voglia assegnarlo a qualcosa, probabilmente dovresti fare qualcosa del tipo:

var out = num<0?num*=-1:num; //I think someone already mentioned this variant.

Ma dipende davvero qual è il tuo obiettivo. Per me è stato semplice, rendilo positivo se negativo, altrimenti non fare nulla. Da qui il '' nel codice. In questo caso ho usato l'operatore terziario perché volevo, potrebbe benissimo essere:

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

Ho visto la soluzione bit per bit qui e volevo commentare anche quella.

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

Quest'anima è molto elegante secondo me, potremmo riscriverla in questo modo:

~(num = num-1);

In termini semplici, prendiamo il numero negativo, ne togliiamo uno e poi lo invertiamo bit per bit. Se lo avessimo invertito bit per bit normalmente avremmo un valore 1 troppo piccolo. Puoi anche fare questo:

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

Ciò farà lo stesso ma invertirà prima e poi aggiungerà 1 al numero positivo. Sebbene CANT lo faccia:

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

Ciò non funzionerà a causa della precedenza , gli operatori postfix come num++verrebbero valutati prima di ~ e il prefisso del motivo++num non funzionerebbe anche se si trova sulla stessa precedenza di NOT bit a bit (~), perché è valutato da destra a sinistra. Ho provato a scambiarli, ma sembra che il prefisso sia un po 'schizzinoso rispetto al NOT bit a bit. Il +1 funzionerà perché '+' ha una precedenza più alta e verrà valutato in seguito.

Ho trovato quella soluzione piuttosto divertente e ho deciso di ampliarla perché è stata appena lanciata lì e postare persone che la guardano probabilmente la stanno ignorando. Anche se sì, non funzionerà con i float.

Le mie speranze sono che questo post non si sia allontanato dalla domanda originale. : /


2

Il mio approccio minimale

Per convertire un numero negativo in positivo e viceversa

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


0

È possibile utilizzare l' operatore ~ che converte logicamente il numero in negativo e ne aggiunge 1 in negativo:

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


0

Conosco un altro modo di farlo. Questa tecnica funziona da negativa a positiva e viceversa

var x = -24;
var result = x * -1;

Vice versa:

var x = 58;
var result = x * -1;

CODICE LIVE:

// 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);


Questo non risponde alla domanda. dave chiede una funzione che cambia il valore da negativo a positivo e da positivo a positivo .
RaphaMex,

La sua domanda dice "Esiste una funzione matematica in JavaScript che converte i numeri in valore positivo?" Non menziona il positivo al positivo. Menziona solo il negativo al positivo. Perché vorresti convertire positivo in positivo. Il valore sarebbe lo stesso.
Tarryk Ttmm

Puoi chiedere chiarimenti in un commento sotto la domanda. Ad ogni modo, c'è una risposta accettata che è quella corretta. Puoi leggerlo di nuovo e vedere che c'è una funzione integrata che ... converte da positivo a positivo.
RaphaMex,


0

Se vuoi che il numero sia sempre positivo, qualunque cosa tu possa fare.

function toPositive(n){
    if(n < 0){
        n = n * -1;
    }
    return n;
}
var a = toPositive(2);  // 2
var b = toPositive(-2); // 2

Potresti anche provare questo, ma non lo consiglio:

function makePositive(n){
    return Number((n*-n).toString().replace('-','')); 
}
var a = makePositive(2);  // 2
var b = makePositive(-2); // 2

Il problema è che potresti cambiare il numero in negativo, quindi convertirlo in stringa e rimuovere il - dalla stringa, quindi riconvertirlo in int. Il che immagino richiederebbe una maggiore elaborazione rispetto all'uso dell'altra funzione.

Ho provato questo in php e la prima funzione è più veloce, ma a volte JS fa cose pazze, quindi non posso dirlo con certezza.


Nel secondo esempio viene emessa la potenza del numero di input. n*-ndovrebbe essere n*-1. Rimuoverei del tutto l'esempio, tuttavia, poiché le conversioni di tipo e la chiamata del metodo sono molto inefficienti rispetto alla semplicità del primo esempio. Anche la stranezza di JS non può assolutamente aiutare qui
Gust van de Wal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.