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.